diff --git a/CHANGELOG.md b/CHANGELOG.md index a542e0168b6..441f61dcfbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,39 +24,50 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p - MUI v5 Migration - `Components > IconButton` #9102 - MUI v5 Migration - `Components > EntityHeader` #9109 + ## [2023-05-15] - v1.93.0 ### Added: - - Resource links to empty state Volumes landing page #9065 - Resource links to empty state Firewalls landing page #9078 - Resource links to empty state StackScripts landing page #9091 - Resource links to empty state Domains landing page #9092 - Ability download DNS zone file #9075 +- New flag to deliver DC availability notice for premium plans #9066 +- Accessible graph data for LineGraphs #9045 ### Changed: - -- Removed MongoDB reference from ClusterControl description #9081 +- Banner text size and spacing to improve readability #9064 +- Updated ClusterControl description #9081 - Highlighted Marketplace apps and button card height on empty state Linodes landing page #9083 ### Fixed: - - Ability to search Linodes by IPv6 #9073 +- Surface general errors in the Object Storage Bucket Create Drawer #9067 +- Large file size for invoices due to uncompressed JPG logo #9069 +- Phone Verification error does not reset #9059 +- Show error for PayPal payments #9058 +- Send Adobe Analytics page views #9108 ### Tech Stories: - -- Enable Cypress `experimentalMemoryManagement` #9076 +- MUI v5 Migration - `Components > CheckoutSummary` #9100 +- MUI v5 Migration - `Components > CopyableTextField` #9018 +- MUI v5 Migration - `Components > DialogTitle` #9050 +- MUI v5 Migration - `Components > DownloadCSV` #9084 +- MUI v5 Migration - `Components > Notice` #9094 +- MUI v5 Migration - `Components > PrimaryNav` #9090 +- MUI v5 Migration - `Components > ShowMoreExpansion` #9096 - MUI v5 Migration - `Components > Table` #9082 +- MUI v5 Migration - `Components > TableBody` #9082 - MUI v5 Migration - `Components > TableCell` #9082 - MUI v5 Migration - `Components > TableHead` #9082 -- MUI v5 Migration - `Components > TableBody` #9082 -- MUI v5 Migration - `Components > TableSortCell` #9082 - MUI v5 Migration - `Components > TableRow` #9082 -- MUI v5 Migration - `Components > DownloadCSV` #9084 -- MUI v5 Migration - `Components > Notice` #9094 -- MUI v5 Migration - `Components > CheckoutSummary` #9100 -- MUI v5 Migration - `Components > PrimaryNav` #9090 -- React Query for Linodes Landing #9062 +- MUI v5 Migration - `Components > TableSortCell` #9082 +- React Query - Linodes - Prepare for React Query for Linodes #9049 +- React Query - Linodes - Landing #9062 +- React Query - Linodes - Detail - Backups #9079 +- Add Adobe Analytics custom event tracking #9004 + ## [2023-05-01] - v1.92.0 diff --git a/packages/api-v4/CHANGELOG.md b/packages/api-v4/CHANGELOG.md index ebe191d0ece..cb7471c761f 100644 --- a/packages/api-v4/CHANGELOG.md +++ b/packages/api-v4/CHANGELOG.md @@ -1,3 +1,14 @@ + +## [2023-05-15] - v0.92.0 + +### Added: +- Ability download DNS zone file #9075 +- React Query - Linodes - Landing #9062 +- Added `available` to the `LinodeBackup` type #9079 + +### Fixed: +- Removed deprecated PayPal endpoints #9058 + ## [2023-05-01] - v0.91.0 ### Added: diff --git a/packages/api-v4/package.json b/packages/api-v4/package.json index f3692585d8d..f6e8ac62d7a 100644 --- a/packages/api-v4/package.json +++ b/packages/api-v4/package.json @@ -1,6 +1,6 @@ { "name": "@linode/api-v4", - "version": "0.91.0", + "version": "0.92.0", "homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4", "bugs": { "url": "https://github.com/linode/manager/issues" diff --git a/packages/manager/package.json b/packages/manager/package.json index b1849692554..1fba09ffd56 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -2,7 +2,7 @@ "name": "linode-manager", "author": "Linode", "description": "The Linode Manager website", - "version": "1.92.0", + "version": "1.93.0", "private": true, "bugs": { "url": "https://github.com/Linode/manager/issues" diff --git a/packages/manager/src/App.tsx b/packages/manager/src/App.tsx index a93a31f4794..813d386b6dc 100644 --- a/packages/manager/src/App.tsx +++ b/packages/manager/src/App.tsx @@ -91,12 +91,20 @@ export class App extends React.Component { } /** - * Send pageviews unless blocklisted. + * Send pageviews */ this.props.history.listen(({ pathname }) => { + // Send Google Analytics page view events if ((window as any).ga) { (window as any).ga('send', 'pageview', pathname); } + + // Send Adobe Analytics page view events + if ((window as any)._satellite) { + (window as any)._satellite.track('page view', { + url: pathname, + }); + } }); /** diff --git a/packages/manager/src/features/OneClickApps/FakeSpec.ts b/packages/manager/src/features/OneClickApps/FakeSpec.ts index 2da48aa5179..4ed7561958f 100644 --- a/packages/manager/src/features/OneClickApps/FakeSpec.ts +++ b/packages/manager/src/features/OneClickApps/FakeSpec.ts @@ -311,7 +311,7 @@ export const oneClickApps: OCA[] = [ name: 'ClusterControl', alt_name: 'Database monitoring', alt_description: - 'SQL and NoSQL database interface and monitoring for MySQL, MongoDB, PostgreSQL, and more.', + 'SQL and NoSQL database interface and monitoring for MySQL, PostgreSQL, and more.', categories: ['Databases'], description: `All-in-one interface for scripting and monitoring databases, including MySQL, MariaDB, Percona, PostgreSQL, Galera Cluster and more. Easily deploy database instances, manage with an included CLI, and automate performance monitoring.`, summary: diff --git a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptsEmptyResourcesData.ts b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptsEmptyResourcesData.ts index 42e969382b1..7a53a44f7ea 100644 --- a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptsEmptyResourcesData.ts +++ b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptsEmptyResourcesData.ts @@ -36,7 +36,7 @@ export const gettingStartedGuides: ResourcesLinkSection = { ], moreInfo: { to: 'https://www.linode.com/docs/products/tools/stackscripts/ ', - text: 'View additional Object Storage documentation', + text: 'View additional StackScripts documentation', }, title: 'Getting Started Guides', }; diff --git a/packages/manager/src/features/linodes/LinodesDetail/LinodeNetworking/CreateIPv4Drawer.tsx b/packages/manager/src/features/linodes/LinodesDetail/LinodeNetworking/CreateIPv4Drawer.tsx new file mode 100644 index 00000000000..7fdc94f6b5e --- /dev/null +++ b/packages/manager/src/features/linodes/LinodesDetail/LinodeNetworking/CreateIPv4Drawer.tsx @@ -0,0 +1,117 @@ +import { allocateIPAddress } from '@linode/api-v4/lib/linodes'; +import { APIError } from '@linode/api-v4/lib/types'; +import * as React from 'react'; +import ActionsPanel from 'src/components/ActionsPanel'; +import Button from 'src/components/Button'; +import Typography from 'src/components/core/Typography'; +import Drawer from 'src/components/Drawer'; +import { Notice } from 'src/components/Notice/Notice'; +import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; +import getAPIErrorsFor from 'src/utilities/getAPIErrorFor'; +import scrollErrorIntoView from 'src/utilities/scrollErrorIntoView'; +import substituteLink from 'src/utilities/substituteLink'; + +interface Props { + open: boolean; + forPublic: boolean; + onClose: () => void; + linodeID: number; +} + +interface State { + forPublic: boolean; + errors?: APIError[]; +} + +type CombinedProps = Props; + +class CreateIPv4Drawer extends React.Component { + state: State = { + forPublic: this.props.forPublic, + }; + + UNSAFE_componentWillReceiveProps(nextProps: CombinedProps) { + this.setState({ + errors: undefined, + forPublic: nextProps.forPublic, + }); + } + + create = () => { + const { onClose, linodeID } = this.props; + // Only IPv4 addresses can currently be allocated. + allocateIPAddress(linodeID, { type: 'ipv4', public: this.state.forPublic }) + .then((_) => { + onClose(); + }) + .catch((errResponse) => { + this.setState( + { + errors: getAPIErrorOrDefault(errResponse), + }, + () => { + scrollErrorIntoView(); + } + ); + }); + }; + + getCopy(): string { + const publicCopy = `Public IP addresses, over and above the one included + with each Linode, incur an additional monthly charge. If you need an + additional Public IP Address you must request one. Please open a support + ticket if you have not done so already.`; + const privateCopy = `Add a private IP address to your Linode. Data sent + explicitly to and from private IP addresses in the same data center does + not incur transfer quota usage. To ensure that the private IP is properly + configured once added, it\u{2019}s best to reboot your Linode.`; + return this.state.forPublic ? publicCopy : privateCopy; + } + + render() { + const { open, onClose, forPublic } = this.props; + const { errors } = this.state; + + const hasErrorFor = getAPIErrorsFor({}, errors); + + return ( + + + + {this.getCopy()} + + {hasErrorFor('none') && ( +
+ + {substituteLink( + hasErrorFor('none') || '', + 'support ticket', + '/support' + )} + +
+ )} + + + + +
+
+ ); + } +} + +export default CreateIPv4Drawer; diff --git a/packages/manager/src/features/linodes/LinodesLanding/DeleteLinodeDialog.tsx b/packages/manager/src/features/linodes/LinodesLanding/DeleteLinodeDialog.tsx index f72c38d3756..5ed04b7d92d 100644 --- a/packages/manager/src/features/linodes/LinodesLanding/DeleteLinodeDialog.tsx +++ b/packages/manager/src/features/linodes/LinodesLanding/DeleteLinodeDialog.tsx @@ -11,10 +11,11 @@ interface Props { linodeId: number | undefined; open: boolean; onClose: () => void; + onSuccess?: () => void; } export const DeleteLinodeDialog = (props: Props) => { - const { linodeId, open, onClose } = props; + const { linodeId, open, onClose, onSuccess } = props; const { data: linode } = useLinodeQuery( linodeId ?? -1, @@ -34,6 +35,10 @@ export const DeleteLinodeDialog = (props: Props) => { const onDelete = async () => { await mutateAsync(); onClose(); + + if (onSuccess) { + onSuccess(); + } }; return (