-
Notifications
You must be signed in to change notification settings - Fork 367
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Statically Cache Marketplace Apps #9732
Changes from 6 commits
55c5413
e3427e5
14329eb
53e3172
7bf46e3
5142435
671d463
7489f7f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. now I know why we get those at build time! speaking of, are we supposed to always commit updates when we seen them? for example, regions seems to be an exception cause it does not contain some regions we have been working with (Jakarta, Sao Paulo)? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure why We talked about |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import { StackScript } from '@linode/api-v4'; | ||
import React from 'react'; | ||
import { useLocation } from 'react-router-dom'; | ||
|
||
import { baseApps } from 'src/features/StackScripts/stackScriptUtils'; | ||
import { useFlags } from 'src/hooks/useFlags'; | ||
import { useStackScriptsOCA } from 'src/queries/stackscripts'; | ||
import { getQueryParamFromQueryString } from 'src/utilities/queryParams'; | ||
|
||
const trimOneClickFromLabel = (script: StackScript) => { | ||
return { | ||
...script, | ||
label: script.label.replace('One-Click', ''), | ||
}; | ||
}; | ||
|
||
export interface WithMarketplaceAppsProps { | ||
appInstances: StackScript[] | undefined; | ||
appInstancesError: string | undefined; | ||
appInstancesLoading: boolean; | ||
} | ||
|
||
export const withMarketplaceApps = <Props>( | ||
Component: React.ComponentType<Props & WithMarketplaceAppsProps> | ||
) => (props: Props) => { | ||
const location = useLocation(); | ||
const flags = useFlags(); | ||
|
||
const type = getQueryParamFromQueryString(location.search, 'type'); | ||
|
||
// Only enable the query when the user is on the Marketplace page | ||
const enabled = type === 'One-Click'; | ||
|
||
const { data, error, isLoading } = useStackScriptsOCA(enabled); | ||
|
||
const newApps = flags.oneClickApps || []; | ||
const allowedApps = Object.keys({ ...baseApps, ...newApps }); | ||
|
||
const filteredApps = (data ?? []).filter((script) => { | ||
return ( | ||
!script.label.match(/helpers/i) && allowedApps.includes(String(script.id)) | ||
); | ||
}); | ||
const trimmedApps = filteredApps.map((stackscript) => | ||
trimOneClickFromLabel(stackscript) | ||
); | ||
|
||
return React.createElement(Component, { | ||
...props, | ||
appInstances: trimmedApps, | ||
appInstancesError: error?.[0]?.reason, | ||
appInstancesLoading: isLoading, | ||
}); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so this will work for all stackscripts requests? (stackscripts + OCA)? Or just OCA because of the filter definition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just Marketplace. This filter is a copy-paste of
oneClickFilter
(I don't think I can import it from TS into a JS file)I don't think we want to attempt StackScript caching because at that point we'd have to worry about pagination.