@webiny/app-admin 5.25.0 → 5.26.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/AppInstaller/AppInstaller.d.ts +5 -0
- package/components/AppInstaller/AppInstaller.js +19 -2
- package/components/AppInstaller/AppInstaller.js.map +1 -1
- package/components/AppInstaller/useInstaller.d.ts +1 -0
- package/components/AppInstaller/useInstaller.js +4 -0
- package/components/AppInstaller/useInstaller.js.map +1 -1
- package/components/FileManager/FileDetails/Tags.d.ts +2 -0
- package/components/FileManager/FileDetails/Tags.js +61 -16
- package/components/FileManager/FileDetails/Tags.js.map +1 -1
- package/components/FileManager/FileDetails.js +8 -2
- package/components/FileManager/FileDetails.js.map +1 -1
- package/components/FileManager/FileManagerContext.d.ts +10 -0
- package/components/FileManager/FileManagerContext.js +33 -3
- package/components/FileManager/FileManagerContext.js.map +1 -1
- package/components/FileManager/FileManagerView.d.ts +3 -0
- package/components/FileManager/FileManagerView.js +3 -1
- package/components/FileManager/FileManagerView.js.map +1 -1
- package/components/FileManager/LeftSidebar.d.ts +1 -0
- package/components/FileManager/LeftSidebar.js +15 -5
- package/components/FileManager/LeftSidebar.js.map +1 -1
- package/components/FileManager/graphql.js +2 -2
- package/components/FileManager/graphql.js.map +1 -1
- package/components/FileManager.d.ts +3 -0
- package/components/FileManager.js +8 -2
- package/components/FileManager.js.map +1 -1
- package/components/SimpleForm/SimpleForm.d.ts +1 -0
- package/components/SimpleForm/SimpleForm.js +1 -1
- package/components/SimpleForm/SimpleForm.js.map +1 -1
- package/components/SplitView/SplitView.d.ts +1 -0
- package/components/SplitView/SplitView.js +1 -1
- package/components/SplitView/SplitView.js.map +1 -1
- package/package.json +19 -19
- package/ui/elements/form/FileManagerElement/styled.d.ts +3 -3
|
@@ -18,6 +18,14 @@ export var AppInstaller = function AppInstaller(_ref) {
|
|
|
18
18
|
var tenantId = localStorage.get("webiny_tenant") || "root";
|
|
19
19
|
var lsKey = "webiny_installation_".concat(tenantId);
|
|
20
20
|
var wbyVersion = appConfig.getKey("WEBINY_VERSION", process.env.REACT_APP_WEBINY_VERSION);
|
|
21
|
+
var isRootTenant = tenantId === "root";
|
|
22
|
+
/*
|
|
23
|
+
* This flag allows us to avoid rendering the <iframe> when the app is tested with Cypress
|
|
24
|
+
* (Cypress doesn't work with cross domains because of security-related implications).
|
|
25
|
+
* @see https://docs.cypress.io/guides/guides/web-security#Insecure-Content
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
var isCypressTest = window && window.Cypress;
|
|
21
29
|
|
|
22
30
|
var markInstallerAsCompleted = function markInstallerAsCompleted() {
|
|
23
31
|
localStorage.set(lsKey, wbyVersion);
|
|
@@ -41,6 +49,7 @@ export var AppInstaller = function AppInstaller(_ref) {
|
|
|
41
49
|
loading = _useInstaller.loading,
|
|
42
50
|
installers = _useInstaller.installers,
|
|
43
51
|
installer = _useInstaller.installer,
|
|
52
|
+
isFirstInstall = _useInstaller.isFirstInstall,
|
|
44
53
|
showNextInstaller = _useInstaller.showNextInstaller,
|
|
45
54
|
showLogin = _useInstaller.showLogin,
|
|
46
55
|
onUser = _useInstaller.onUser,
|
|
@@ -126,11 +135,19 @@ export var AppInstaller = function AppInstaller(_ref) {
|
|
|
126
135
|
|
|
127
136
|
return renderLayout(renderBody( /*#__PURE__*/React.createElement(Elevation, {
|
|
128
137
|
z: 1
|
|
129
|
-
}, /*#__PURE__*/React.createElement(SuccessDialog, null, /*#__PURE__*/React.createElement("p", null, "You have successfully installed all new applications!"), /*#__PURE__*/React.createElement(
|
|
138
|
+
}, /*#__PURE__*/React.createElement(SuccessDialog, null, /*#__PURE__*/React.createElement("p", null, "You have successfully installed all new applications!"), !isCypressTest && isRootTenant && isFirstInstall ? /*#__PURE__*/React.createElement("iframe", {
|
|
139
|
+
height: "0",
|
|
140
|
+
width: "0",
|
|
141
|
+
frameBorder: "0",
|
|
142
|
+
style: {
|
|
143
|
+
opacity: "0"
|
|
144
|
+
},
|
|
145
|
+
src: "https://www.webiny.com/thank-you/new-install"
|
|
146
|
+
}) : null, /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
130
147
|
"data-testid": "open-webiny-cms-admin-button",
|
|
131
148
|
onClick: function onClick() {
|
|
132
149
|
markInstallerAsCompleted();
|
|
133
150
|
setFinished(true);
|
|
134
151
|
}
|
|
135
|
-
}, "
|
|
152
|
+
}, isFirstInstall ? "Finish install" : "Finish upgrade")))), true);
|
|
136
153
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["AppInstaller.tsx"],"names":["React","useEffect","useState","default","localStorage","LoginScreen","useSecurity","CircularProgress","ButtonPrimary","SplitView","LeftPanel","RightPanel","Grid","Cell","Typography","Elevation","useInstaller","Sidebar","Wrapper","alertClass","InnerContent","InstallContent","installerSplitView","SuccessDialog","config","appConfig","AppInstaller","children","tenantId","get","lsKey","wbyVersion","getKey","process","env","REACT_APP_WEBINY_VERSION","markInstallerAsCompleted","set","isInstallerCompleted","finished","setFinished","identity","isInstalled","loading","installers","installer","showNextInstaller","showLogin","onUser","skippingVersions","renderLayout","content","secure","renderBody","length","render","onInstalled","latest","current","availableUpgrades","filter","v","map"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { default as localStorage } from \"store\";\nimport { LoginScreen } from \"~/index\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport { SplitView, LeftPanel, RightPanel } from \"../SplitView\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { useInstaller } from \"./useInstaller\";\nimport Sidebar from \"./Sidebar\";\nimport {\n Wrapper,\n alertClass,\n InnerContent,\n InstallContent,\n installerSplitView,\n SuccessDialog\n} from \"./styled\";\nimport { config as appConfig } from \"@webiny/app/config\";\n\nexport const AppInstaller: React.FC = ({ children }) => {\n const tenantId = localStorage.get(\"webiny_tenant\") || \"root\";\n\n const lsKey = `webiny_installation_${tenantId}`;\n const wbyVersion = appConfig.getKey(\"WEBINY_VERSION\", process.env.REACT_APP_WEBINY_VERSION);\n\n const markInstallerAsCompleted = () => {\n localStorage.set(lsKey, wbyVersion);\n };\n\n const isInstallerCompleted = () => {\n return localStorage.get(lsKey) === wbyVersion;\n };\n\n const [finished, setFinished] = useState(false);\n const { identity } = useSecurity();\n const {\n loading,\n installers,\n installer,\n showNextInstaller,\n showLogin,\n onUser,\n skippingVersions\n } = useInstaller({ isInstalled: isInstallerCompleted() });\n\n useEffect(() => {\n if (identity) {\n onUser();\n }\n }, [identity]);\n\n if (isInstallerCompleted()) {\n return <LoginScreen>{children}</LoginScreen>;\n }\n\n const renderLayout = (content: React.ReactNode, secure = false): React.ReactElement => {\n return (\n <SplitView className={installerSplitView}>\n <LeftPanel span={2}>\n <Sidebar\n allInstallers={installers}\n installer={installer}\n showLogin={showLogin}\n />\n </LeftPanel>\n <RightPanel span={10}>\n {!showLogin && !secure && content}\n {(showLogin || secure) && <LoginScreen>{content}</LoginScreen>}\n </RightPanel>\n </SplitView>\n );\n };\n\n const renderBody = (content: React.ReactNode): React.ReactElement => {\n return (\n <Wrapper>\n <InstallContent>\n <InnerContent>{content}</InnerContent>\n </InstallContent>\n </Wrapper>\n );\n };\n\n // Loading installers data\n if (loading) {\n return <CircularProgress label={\"Checking apps...\"} />;\n }\n\n // This means there are no installers to run or installation was finished\n if (!loading && (installers.length === 0 || finished)) {\n markInstallerAsCompleted();\n return <LoginScreen>{children}</LoginScreen>;\n }\n\n if (installer) {\n return renderLayout(\n renderBody(installer.render({ onInstalled: showNextInstaller })),\n installer.secure\n );\n }\n\n if (skippingVersions) {\n return renderBody(\n <Elevation z={1} className={alertClass}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline4\"}>Important!</Typography>\n </Cell>\n <Cell span={12}>\n <Typography use={\"body1\"} tag={\"div\"}>\n We've detected that your current application is running Webiny{\" \"}\n <strong>v{skippingVersions.latest}</strong>. However, your API is\n running <strong>v{skippingVersions.current}</strong>. Unfortunately, we\n can't upgrade your system by skipping versions in between.\n <br />\n <br />\n Here's a list of versions you skipped, that contain upgrades you\n need to install:\n <ul>\n {skippingVersions.availableUpgrades\n .filter(v => v !== skippingVersions.latest)\n .map(v => (\n <li key={v}>v{v}</li>\n ))}\n </ul>\n For instructions on how to upgrade Webiny, please consult our{\" \"}\n <a\n href={\"https://docs.webiny.com/docs/how-to-guides/upgrade-webiny\"}\n target={\"_blank\"}\n rel={\"noreferrer noopener\"}\n >\n Upgrade Webiny\n </a>{\" \"}\n guide. Note that some versions may have a dedicated article with upgrade\n instructions, so look out for those in the upgrade guide.\n <br />\n <br />\n If you run into problems, find us on our{\" \"}\n <a\n href={\"https://www.webiny.com/slack\"}\n target={\"_blank\"}\n rel={\"noreferrer noopener\"}\n >\n Slack community.\n </a>\n </Typography>\n </Cell>\n </Grid>\n </Elevation>\n );\n }\n\n return renderLayout(\n renderBody(\n <Elevation z={1}>\n <SuccessDialog>\n <p>You have successfully installed all new applications!</p>\n <ButtonPrimary\n data-testid={\"open-webiny-cms-admin-button\"}\n onClick={() => {\n markInstallerAsCompleted();\n setFinished(true);\n }}\n >\n Open Admin Area\n </ButtonPrimary>\n </SuccessDialog>\n </Elevation>\n ),\n true\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["AppInstaller.tsx"],"names":["React","useEffect","useState","default","localStorage","LoginScreen","useSecurity","CircularProgress","ButtonPrimary","SplitView","LeftPanel","RightPanel","Grid","Cell","Typography","Elevation","useInstaller","Sidebar","Wrapper","alertClass","InnerContent","InstallContent","installerSplitView","SuccessDialog","config","appConfig","AppInstaller","children","tenantId","get","lsKey","wbyVersion","getKey","process","env","REACT_APP_WEBINY_VERSION","isRootTenant","isCypressTest","window","Cypress","markInstallerAsCompleted","set","isInstallerCompleted","finished","setFinished","identity","isInstalled","loading","installers","installer","isFirstInstall","showNextInstaller","showLogin","onUser","skippingVersions","renderLayout","content","secure","renderBody","length","render","onInstalled","latest","current","availableUpgrades","filter","v","map","opacity"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { default as localStorage } from \"store\";\nimport { LoginScreen } from \"~/index\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport { SplitView, LeftPanel, RightPanel } from \"../SplitView\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { useInstaller } from \"./useInstaller\";\nimport Sidebar from \"./Sidebar\";\n\ndeclare global {\n interface Window {\n Cypress: any;\n }\n}\n\nimport {\n Wrapper,\n alertClass,\n InnerContent,\n InstallContent,\n installerSplitView,\n SuccessDialog\n} from \"./styled\";\nimport { config as appConfig } from \"@webiny/app/config\";\n\nexport const AppInstaller: React.FC = ({ children }) => {\n const tenantId = localStorage.get(\"webiny_tenant\") || \"root\";\n const lsKey = `webiny_installation_${tenantId}`;\n const wbyVersion = appConfig.getKey(\"WEBINY_VERSION\", process.env.REACT_APP_WEBINY_VERSION);\n const isRootTenant = tenantId === \"root\";\n /*\n * This flag allows us to avoid rendering the <iframe> when the app is tested with Cypress\n * (Cypress doesn't work with cross domains because of security-related implications).\n * @see https://docs.cypress.io/guides/guides/web-security#Insecure-Content\n */\n const isCypressTest = window && window.Cypress;\n\n const markInstallerAsCompleted = () => {\n localStorage.set(lsKey, wbyVersion);\n };\n\n const isInstallerCompleted = () => {\n return localStorage.get(lsKey) === wbyVersion;\n };\n\n const [finished, setFinished] = useState(false);\n const { identity } = useSecurity();\n const {\n loading,\n installers,\n installer,\n isFirstInstall,\n showNextInstaller,\n showLogin,\n onUser,\n skippingVersions\n } = useInstaller({ isInstalled: isInstallerCompleted() });\n\n useEffect(() => {\n if (identity) {\n onUser();\n }\n }, [identity]);\n\n if (isInstallerCompleted()) {\n return <LoginScreen>{children}</LoginScreen>;\n }\n\n const renderLayout = (content: React.ReactNode, secure = false): React.ReactElement => {\n return (\n <SplitView className={installerSplitView}>\n <LeftPanel span={2}>\n <Sidebar\n allInstallers={installers}\n installer={installer}\n showLogin={showLogin}\n />\n </LeftPanel>\n <RightPanel span={10}>\n {!showLogin && !secure && content}\n {(showLogin || secure) && <LoginScreen>{content}</LoginScreen>}\n </RightPanel>\n </SplitView>\n );\n };\n\n const renderBody = (content: React.ReactNode): React.ReactElement => {\n return (\n <Wrapper>\n <InstallContent>\n <InnerContent>{content}</InnerContent>\n </InstallContent>\n </Wrapper>\n );\n };\n\n // Loading installers data\n if (loading) {\n return <CircularProgress label={\"Checking apps...\"} />;\n }\n\n // This means there are no installers to run or installation was finished\n if (!loading && (installers.length === 0 || finished)) {\n markInstallerAsCompleted();\n return <LoginScreen>{children}</LoginScreen>;\n }\n\n if (installer) {\n return renderLayout(\n renderBody(installer.render({ onInstalled: showNextInstaller })),\n installer.secure\n );\n }\n\n if (skippingVersions) {\n return renderBody(\n <Elevation z={1} className={alertClass}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline4\"}>Important!</Typography>\n </Cell>\n <Cell span={12}>\n <Typography use={\"body1\"} tag={\"div\"}>\n We've detected that your current application is running Webiny{\" \"}\n <strong>v{skippingVersions.latest}</strong>. However, your API is\n running <strong>v{skippingVersions.current}</strong>. Unfortunately, we\n can't upgrade your system by skipping versions in between.\n <br />\n <br />\n Here's a list of versions you skipped, that contain upgrades you\n need to install:\n <ul>\n {skippingVersions.availableUpgrades\n .filter(v => v !== skippingVersions.latest)\n .map(v => (\n <li key={v}>v{v}</li>\n ))}\n </ul>\n For instructions on how to upgrade Webiny, please consult our{\" \"}\n <a\n href={\"https://docs.webiny.com/docs/how-to-guides/upgrade-webiny\"}\n target={\"_blank\"}\n rel={\"noreferrer noopener\"}\n >\n Upgrade Webiny\n </a>{\" \"}\n guide. Note that some versions may have a dedicated article with upgrade\n instructions, so look out for those in the upgrade guide.\n <br />\n <br />\n If you run into problems, find us on our{\" \"}\n <a\n href={\"https://www.webiny.com/slack\"}\n target={\"_blank\"}\n rel={\"noreferrer noopener\"}\n >\n Slack community.\n </a>\n </Typography>\n </Cell>\n </Grid>\n </Elevation>\n );\n }\n\n return renderLayout(\n renderBody(\n <Elevation z={1}>\n <SuccessDialog>\n <p>You have successfully installed all new applications!</p>\n {!isCypressTest && isRootTenant && isFirstInstall ? (\n <iframe\n height=\"0\"\n width=\"0\"\n frameBorder=\"0\"\n style={{ opacity: \"0\" }}\n src=\"https://www.webiny.com/thank-you/new-install\"\n ></iframe>\n ) : null}\n <ButtonPrimary\n data-testid={\"open-webiny-cms-admin-button\"}\n onClick={() => {\n markInstallerAsCompleted();\n setFinished(true);\n }}\n >\n {isFirstInstall ? \"Finish install\" : \"Finish upgrade\"}\n </ButtonPrimary>\n </SuccessDialog>\n </Elevation>\n ),\n true\n );\n};\n"]}
|
|
@@ -21,6 +21,7 @@ export interface Installer extends BaseInstaller {
|
|
|
21
21
|
export declare const useInstaller: (params: UseInstallerParams) => {
|
|
22
22
|
loading: boolean;
|
|
23
23
|
installers: Installer[];
|
|
24
|
+
isFirstInstall: boolean;
|
|
24
25
|
installer: Installer;
|
|
25
26
|
showNextInstaller: () => any;
|
|
26
27
|
showLogin: boolean;
|
|
@@ -278,9 +278,13 @@ export var useInstaller = function useInstaller(params) {
|
|
|
278
278
|
}, _callee2);
|
|
279
279
|
}))();
|
|
280
280
|
}, []);
|
|
281
|
+
var isFirstInstall = installers.some(function (installer) {
|
|
282
|
+
return installer.installed;
|
|
283
|
+
});
|
|
281
284
|
return {
|
|
282
285
|
loading: loading,
|
|
283
286
|
installers: installers,
|
|
287
|
+
isFirstInstall: isFirstInstall,
|
|
284
288
|
installer: installers[installerIndex],
|
|
285
289
|
showNextInstaller: showNextInstaller,
|
|
286
290
|
showLogin: showLogin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useInstaller.tsx"],"names":["React","useCallback","useReducer","useEffect","Suspense","Graph","alg","sort","gt","lte","useApolloClient","plugins","CircularProgress","config","appConfig","Loader","children","props","cloneElement","useInstaller","params","isInstalled","prev","next","loading","installers","installerIndex","showLogin","skippingVersions","state","setState","client","validateGraph","graph","isAcyclic","cycles","findCycles","msg","forEach","cycle","index","fromAToB","join","fromBToA","reverse","padLength","length","push","padStart","Error","createGraph","plugin","setNode","name","pl","Array","isArray","dependencies","dep","setEdge","getInstallers","toInstall","toUpgrade","leaf","sinks","installer","find","inst","removeNode","installed","type","title","render","secure","wbyVersion","getKey","process","env","REACT_APP_WEBINY_VERSION","upgrades","filter","version","availableUpgrades","map","u","latestUpgrade","current","latest","onInstalled","Component","getComponent","a","b","onUser","showNextInstaller","prevInstaller","undefined","nextIndex","nextInstaller","prevSecure","nextSecure","allInstallers","Promise","all","byType","getInstalledVersion"],"mappings":"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","sourcesContent":["import React, { useCallback, useReducer, useEffect, Suspense } from \"react\";\nimport { Graph, alg } from \"graphlib\";\nimport { sort, gt, lte } from \"semver\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { plugins } from \"@webiny/plugins\";\nimport { AdminInstallationPlugin } from \"~/types\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { config as appConfig } from \"@webiny/app/config\";\n\nconst Loader: React.FC<{ children: React.ReactElement }> = ({ children, ...props }) => (\n <Suspense fallback={<CircularProgress label={\"Loading...\"} />}>\n {React.cloneElement(children, props)}\n </Suspense>\n);\n\ninterface GetInstallersResult {\n toInstall: Installer[];\n toUpgrade: Installer[];\n}\n\ninterface UseInstallerParams {\n isInstalled: boolean;\n}\n\ninterface SkippingVersionState {\n current: string;\n latest: string;\n availableUpgrades: string[];\n}\n\ninterface BaseInstaller {\n installed: string | null;\n plugin: AdminInstallationPlugin;\n}\n\nexport interface Installer extends BaseInstaller {\n type: \"install\" | \"upgrade\";\n name: string;\n title: string;\n render: AdminInstallationPlugin[\"render\"];\n secure?: boolean;\n}\ninterface State {\n loading: boolean;\n installers: Installer[];\n installerIndex: number;\n showLogin: boolean;\n skippingVersions: SkippingVersionState | null;\n}\n\ninterface Reducer {\n (prev: State, next: Partial<State>): State;\n}\n\nexport const useInstaller = (params: UseInstallerParams) => {\n const { isInstalled } = params;\n const [state, setState] = useReducer<Reducer>((prev, next) => ({ ...prev, ...next }), {\n loading: true,\n installers: [],\n installerIndex: -1,\n showLogin: false,\n skippingVersions: null\n });\n const { loading, installers, installerIndex, showLogin, skippingVersions } = state;\n\n const client = useApolloClient();\n\n const validateGraph = (graph: Graph): void => {\n const isAcyclic = alg.isAcyclic(graph);\n if (isAcyclic) {\n return;\n }\n const cycles = alg.findCycles(graph);\n const msg = [\"Your installers have circular dependencies:\"];\n cycles.forEach((cycle, index) => {\n let fromAToB = cycle.join(\" --> \");\n fromAToB = `${index + 1}. ${fromAToB}`;\n const fromBToA = cycle.reverse().join(\" <-- \");\n const padLength = fromAToB.length + 4;\n msg.push(fromAToB.padStart(padLength));\n msg.push(fromBToA.padStart(padLength));\n }, cycles);\n throw new Error(msg.join(\"\\n\"));\n };\n\n const createGraph = (installers: BaseInstaller[]): Graph => {\n const graph = new Graph();\n installers.forEach(({ plugin }) => {\n graph.setNode(plugin.name as string, plugin);\n });\n\n installers.forEach(({ plugin: pl }) => {\n if (Array.isArray(pl.dependencies)) {\n pl.dependencies.forEach(dep => {\n graph.setEdge(pl.name as string, dep);\n });\n }\n });\n\n validateGraph(graph);\n\n return graph;\n };\n\n const getInstallers = useCallback(\n (\n installers: BaseInstaller[],\n graph: Graph,\n toInstall: Installer[] = [],\n toUpgrade: Installer[] = []\n ): GetInstallersResult => {\n const leaf = graph.sinks()[0];\n if (leaf) {\n const installer = installers.find(inst => inst.plugin.name === leaf);\n if (!installer) {\n throw new Error(`Missing installer plugin \"${leaf}\"!`);\n }\n\n graph.removeNode(leaf);\n if (!installer.installed) {\n toInstall.push({\n type: \"install\",\n name: `${installer.plugin.name}-install`,\n title: installer.plugin.title,\n render: installer.plugin.render,\n secure: installer.plugin.secure,\n installed: null,\n plugin: installer.plugin\n });\n } else {\n const wbyVersion = appConfig.getKey(\n \"WEBINY_VERSION\",\n process.env.REACT_APP_WEBINY_VERSION as string\n );\n\n const upgrades = (installer.plugin.upgrades || []).filter(({ version }) => {\n // TODO use coerce\n return lte(version, wbyVersion) && gt(version, installer.installed || \"\");\n });\n\n if (upgrades.length > 1) {\n const availableUpgrades = sort(upgrades.map(u => u.version));\n const latestUpgrade = availableUpgrades[availableUpgrades.length - 1];\n setState({\n skippingVersions: {\n current: installer.installed,\n latest: latestUpgrade,\n availableUpgrades\n }\n });\n } else if (upgrades.length === 1) {\n toUpgrade.push({\n type: \"upgrade\",\n name: `${installer.plugin.name}-upgrade`,\n title: installer.plugin.title,\n secure: true,\n installed: null,\n plugin: installer.plugin,\n render({ onInstalled }) {\n const Component = upgrades[0].getComponent();\n return (\n <Loader>\n <Component onInstalled={onInstalled} />\n </Loader>\n );\n }\n });\n }\n }\n return getInstallers(installers, graph, toInstall, toUpgrade);\n }\n toInstall.sort((a, b) => {\n if (a.secure && !b.secure) {\n return 1;\n } else if (!a.secure && b.secure) {\n return -1;\n }\n return 0;\n });\n return { toInstall, toUpgrade };\n },\n []\n );\n\n const onUser = () => {\n setState({ showLogin: false });\n };\n\n /**\n * If set to anything else, it breaks in AppInstaller.tsx\n */\n const showNextInstaller = (): any => {\n const prevInstaller = installers[installerIndex];\n\n installers[installerIndex].installed = appConfig.getKey(\n \"WEBINY_VERSION\",\n process.env.REACT_APP_WEBINY_VERSION as string\n );\n setState({ installers });\n\n if (installers.length < installerIndex + 1) {\n setState({ installerIndex: undefined });\n return;\n }\n\n const nextIndex = installerIndex + 1;\n\n let showLogin = false;\n const nextInstaller = installers[nextIndex];\n\n const prevSecure = prevInstaller && prevInstaller.secure;\n const nextSecure = nextInstaller && nextInstaller.secure;\n if (!prevSecure && nextSecure) {\n showLogin = true;\n }\n setState({ installerIndex: nextIndex, showLogin });\n };\n\n useEffect(() => {\n (async () => {\n if (isInstalled) {\n return;\n }\n\n const allInstallers: BaseInstaller[] = [];\n await Promise.all(\n plugins.byType<AdminInstallationPlugin>(\"admin-installation\").map(async pl => {\n const installed = await pl.getInstalledVersion({ client });\n allInstallers.push({ plugin: pl, installed });\n })\n );\n\n const graph = createGraph(allInstallers);\n const { toInstall, toUpgrade } = getInstallers(allInstallers, graph);\n const installers = [...toUpgrade, ...toInstall];\n setState({\n installers,\n installerIndex: 0,\n loading: false,\n showLogin: toUpgrade.length > 0 || (toInstall.length > 0 && toInstall[0].secure)\n });\n })();\n }, []);\n\n return {\n loading,\n installers,\n installer: installers[installerIndex],\n showNextInstaller,\n showLogin,\n onUser,\n skippingVersions\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["useInstaller.tsx"],"names":["React","useCallback","useReducer","useEffect","Suspense","Graph","alg","sort","gt","lte","useApolloClient","plugins","CircularProgress","config","appConfig","Loader","children","props","cloneElement","useInstaller","params","isInstalled","prev","next","loading","installers","installerIndex","showLogin","skippingVersions","state","setState","client","validateGraph","graph","isAcyclic","cycles","findCycles","msg","forEach","cycle","index","fromAToB","join","fromBToA","reverse","padLength","length","push","padStart","Error","createGraph","plugin","setNode","name","pl","Array","isArray","dependencies","dep","setEdge","getInstallers","toInstall","toUpgrade","leaf","sinks","installer","find","inst","removeNode","installed","type","title","render","secure","wbyVersion","getKey","process","env","REACT_APP_WEBINY_VERSION","upgrades","filter","version","availableUpgrades","map","u","latestUpgrade","current","latest","onInstalled","Component","getComponent","a","b","onUser","showNextInstaller","prevInstaller","undefined","nextIndex","nextInstaller","prevSecure","nextSecure","allInstallers","Promise","all","byType","getInstalledVersion","isFirstInstall","some"],"mappings":"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","sourcesContent":["import React, { useCallback, useReducer, useEffect, Suspense } from \"react\";\nimport { Graph, alg } from \"graphlib\";\nimport { sort, gt, lte } from \"semver\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { plugins } from \"@webiny/plugins\";\nimport { AdminInstallationPlugin } from \"~/types\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { config as appConfig } from \"@webiny/app/config\";\n\nconst Loader: React.FC<{ children: React.ReactElement }> = ({ children, ...props }) => (\n <Suspense fallback={<CircularProgress label={\"Loading...\"} />}>\n {React.cloneElement(children, props)}\n </Suspense>\n);\n\ninterface GetInstallersResult {\n toInstall: Installer[];\n toUpgrade: Installer[];\n}\n\ninterface UseInstallerParams {\n isInstalled: boolean;\n}\n\ninterface SkippingVersionState {\n current: string;\n latest: string;\n availableUpgrades: string[];\n}\n\ninterface BaseInstaller {\n installed: string | null;\n plugin: AdminInstallationPlugin;\n}\n\nexport interface Installer extends BaseInstaller {\n type: \"install\" | \"upgrade\";\n name: string;\n title: string;\n render: AdminInstallationPlugin[\"render\"];\n secure?: boolean;\n}\ninterface State {\n loading: boolean;\n installers: Installer[];\n installerIndex: number;\n showLogin: boolean;\n skippingVersions: SkippingVersionState | null;\n}\n\ninterface Reducer {\n (prev: State, next: Partial<State>): State;\n}\n\nexport const useInstaller = (params: UseInstallerParams) => {\n const { isInstalled } = params;\n const [state, setState] = useReducer<Reducer>((prev, next) => ({ ...prev, ...next }), {\n loading: true,\n installers: [],\n installerIndex: -1,\n showLogin: false,\n skippingVersions: null\n });\n const { loading, installers, installerIndex, showLogin, skippingVersions } = state;\n\n const client = useApolloClient();\n\n const validateGraph = (graph: Graph): void => {\n const isAcyclic = alg.isAcyclic(graph);\n if (isAcyclic) {\n return;\n }\n const cycles = alg.findCycles(graph);\n const msg = [\"Your installers have circular dependencies:\"];\n cycles.forEach((cycle, index) => {\n let fromAToB = cycle.join(\" --> \");\n fromAToB = `${index + 1}. ${fromAToB}`;\n const fromBToA = cycle.reverse().join(\" <-- \");\n const padLength = fromAToB.length + 4;\n msg.push(fromAToB.padStart(padLength));\n msg.push(fromBToA.padStart(padLength));\n }, cycles);\n throw new Error(msg.join(\"\\n\"));\n };\n\n const createGraph = (installers: BaseInstaller[]): Graph => {\n const graph = new Graph();\n installers.forEach(({ plugin }) => {\n graph.setNode(plugin.name as string, plugin);\n });\n\n installers.forEach(({ plugin: pl }) => {\n if (Array.isArray(pl.dependencies)) {\n pl.dependencies.forEach(dep => {\n graph.setEdge(pl.name as string, dep);\n });\n }\n });\n\n validateGraph(graph);\n\n return graph;\n };\n\n const getInstallers = useCallback(\n (\n installers: BaseInstaller[],\n graph: Graph,\n toInstall: Installer[] = [],\n toUpgrade: Installer[] = []\n ): GetInstallersResult => {\n const leaf = graph.sinks()[0];\n if (leaf) {\n const installer = installers.find(inst => inst.plugin.name === leaf);\n if (!installer) {\n throw new Error(`Missing installer plugin \"${leaf}\"!`);\n }\n\n graph.removeNode(leaf);\n if (!installer.installed) {\n toInstall.push({\n type: \"install\",\n name: `${installer.plugin.name}-install`,\n title: installer.plugin.title,\n render: installer.plugin.render,\n secure: installer.plugin.secure,\n installed: null,\n plugin: installer.plugin\n });\n } else {\n const wbyVersion = appConfig.getKey(\n \"WEBINY_VERSION\",\n process.env.REACT_APP_WEBINY_VERSION as string\n );\n\n const upgrades = (installer.plugin.upgrades || []).filter(({ version }) => {\n // TODO use coerce\n return lte(version, wbyVersion) && gt(version, installer.installed || \"\");\n });\n\n if (upgrades.length > 1) {\n const availableUpgrades = sort(upgrades.map(u => u.version));\n const latestUpgrade = availableUpgrades[availableUpgrades.length - 1];\n setState({\n skippingVersions: {\n current: installer.installed,\n latest: latestUpgrade,\n availableUpgrades\n }\n });\n } else if (upgrades.length === 1) {\n toUpgrade.push({\n type: \"upgrade\",\n name: `${installer.plugin.name}-upgrade`,\n title: installer.plugin.title,\n secure: true,\n installed: null,\n plugin: installer.plugin,\n render({ onInstalled }) {\n const Component = upgrades[0].getComponent();\n return (\n <Loader>\n <Component onInstalled={onInstalled} />\n </Loader>\n );\n }\n });\n }\n }\n return getInstallers(installers, graph, toInstall, toUpgrade);\n }\n toInstall.sort((a, b) => {\n if (a.secure && !b.secure) {\n return 1;\n } else if (!a.secure && b.secure) {\n return -1;\n }\n return 0;\n });\n return { toInstall, toUpgrade };\n },\n []\n );\n\n const onUser = () => {\n setState({ showLogin: false });\n };\n\n /**\n * If set to anything else, it breaks in AppInstaller.tsx\n */\n const showNextInstaller = (): any => {\n const prevInstaller = installers[installerIndex];\n\n installers[installerIndex].installed = appConfig.getKey(\n \"WEBINY_VERSION\",\n process.env.REACT_APP_WEBINY_VERSION as string\n );\n setState({ installers });\n\n if (installers.length < installerIndex + 1) {\n setState({ installerIndex: undefined });\n return;\n }\n\n const nextIndex = installerIndex + 1;\n\n let showLogin = false;\n const nextInstaller = installers[nextIndex];\n\n const prevSecure = prevInstaller && prevInstaller.secure;\n const nextSecure = nextInstaller && nextInstaller.secure;\n if (!prevSecure && nextSecure) {\n showLogin = true;\n }\n setState({ installerIndex: nextIndex, showLogin });\n };\n\n useEffect(() => {\n (async () => {\n if (isInstalled) {\n return;\n }\n\n const allInstallers: BaseInstaller[] = [];\n await Promise.all(\n plugins.byType<AdminInstallationPlugin>(\"admin-installation\").map(async pl => {\n const installed = await pl.getInstalledVersion({ client });\n allInstallers.push({ plugin: pl, installed });\n })\n );\n\n const graph = createGraph(allInstallers);\n const { toInstall, toUpgrade } = getInstallers(allInstallers, graph);\n const installers = [...toUpgrade, ...toInstall];\n setState({\n installers,\n installerIndex: 0,\n loading: false,\n showLogin: toUpgrade.length > 0 || (toInstall.length > 0 && toInstall[0].secure)\n });\n })();\n }, []);\n\n const isFirstInstall = installers.some(installer => installer.installed);\n\n return {\n loading,\n installers,\n isFirstInstall,\n installer: installers[installerIndex],\n showNextInstaller,\n showLogin,\n onUser,\n skippingVersions\n };\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FileItem } from "../types";
|
|
3
|
+
export declare const formatTagAsLabel: (tag: string, scope: string | undefined) => string;
|
|
4
|
+
export declare const tagWithoutScopePrefix: (tags: string[], scope: string) => string[];
|
|
3
5
|
interface TagsProps {
|
|
4
6
|
file: FileItem;
|
|
5
7
|
canEdit: (file: FileItem) => boolean;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
1
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
3
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
4
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
+
var _excluded = ["value"];
|
|
4
6
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
7
|
import React, { useCallback, useState } from "react";
|
|
6
8
|
import classNames from "classnames";
|
|
@@ -15,10 +17,25 @@ import { MultiAutoComplete } from "@webiny/ui/AutoComplete";
|
|
|
15
17
|
import { Icon } from "@webiny/ui/Icon";
|
|
16
18
|
import { Form } from "@webiny/form";
|
|
17
19
|
import { useSnackbar } from "../../../hooks/useSnackbar";
|
|
18
|
-
import { useFileManager } from "./../FileManagerContext";
|
|
20
|
+
import { getWhere, useFileManager } from "./../FileManagerContext";
|
|
19
21
|
import { UPDATE_FILE, LIST_FILES, LIST_TAGS } from "./../graphql";
|
|
20
22
|
import { ReactComponent as EditIcon } from "./../icons/round-edit-24px.svg";
|
|
21
23
|
import { ReactComponent as LabelIcon } from "./../icons/round-label-24px.svg";
|
|
24
|
+
var SCOPE_SEPARATOR = ":";
|
|
25
|
+
export var formatTagAsLabel = function formatTagAsLabel(tag, scope) {
|
|
26
|
+
if (!scope) {
|
|
27
|
+
return tag;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return tag.replace("".concat(scope).concat(SCOPE_SEPARATOR), "");
|
|
31
|
+
};
|
|
32
|
+
export var tagWithoutScopePrefix = function tagWithoutScopePrefix(tags, scope) {
|
|
33
|
+
return tags.filter(function (tag) {
|
|
34
|
+
return tag !== scope;
|
|
35
|
+
}).map(function (tag) {
|
|
36
|
+
return formatTagAsLabel(tag, scope);
|
|
37
|
+
});
|
|
38
|
+
};
|
|
22
39
|
var chipsStyle = /*#__PURE__*/css({
|
|
23
40
|
"&.mdc-chip-set": {
|
|
24
41
|
padding: 0,
|
|
@@ -78,8 +95,13 @@ var Tags = function Tags(_ref) {
|
|
|
78
95
|
var handleEdit = useCallback(function () {
|
|
79
96
|
return setEdit(true);
|
|
80
97
|
}, []);
|
|
81
|
-
var listTagsQuery = useQuery(LIST_TAGS
|
|
82
|
-
|
|
98
|
+
var listTagsQuery = useQuery(LIST_TAGS, {
|
|
99
|
+
variables: {
|
|
100
|
+
where: getWhere(queryParams.scope)
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
var listTags = get(listTagsQuery, "data.fileManager.listTags", []);
|
|
104
|
+
var allTags = tagWithoutScopePrefix(listTags, queryParams.scope);
|
|
83
105
|
var isEditingAllowed = canEdit(file);
|
|
84
106
|
var renderHeaderContent = useCallback(function (_ref2) {
|
|
85
107
|
var data = _ref2.data;
|
|
@@ -94,11 +116,13 @@ var Tags = function Tags(_ref) {
|
|
|
94
116
|
// Render existing tags and "edit tags" action.
|
|
95
117
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Chips, {
|
|
96
118
|
className: classNames("list-item__content", chipsStyle)
|
|
97
|
-
}, data.tags.
|
|
119
|
+
}, data.tags.filter(function (tag) {
|
|
120
|
+
return tag !== queryParams.scope;
|
|
121
|
+
}).map(function (tag, index) {
|
|
98
122
|
var label = typeof tag === "string" ? tag : tag.name;
|
|
99
123
|
return /*#__PURE__*/React.createElement(Chip, {
|
|
100
124
|
key: label + index,
|
|
101
|
-
label: label
|
|
125
|
+
label: formatTagAsLabel(label, queryParams.scope)
|
|
102
126
|
});
|
|
103
127
|
})), isEditingAllowed && /*#__PURE__*/React.createElement(IconButton, {
|
|
104
128
|
className: iconButtonStyle,
|
|
@@ -160,7 +184,10 @@ var Tags = function Tags(_ref) {
|
|
|
160
184
|
if (Array.isArray(newFileData.tags)) {
|
|
161
185
|
// Get list tags data
|
|
162
186
|
var listTagsData = cloneDeep(cache.readQuery({
|
|
163
|
-
query: LIST_TAGS
|
|
187
|
+
query: LIST_TAGS,
|
|
188
|
+
variables: {
|
|
189
|
+
where: getWhere(queryParams.scope)
|
|
190
|
+
}
|
|
164
191
|
}));
|
|
165
192
|
|
|
166
193
|
if (!listTagsData) {
|
|
@@ -182,6 +209,9 @@ var Tags = function Tags(_ref) {
|
|
|
182
209
|
|
|
183
210
|
cache.writeQuery({
|
|
184
211
|
query: LIST_TAGS,
|
|
212
|
+
variables: {
|
|
213
|
+
where: getWhere(queryParams.scope)
|
|
214
|
+
},
|
|
185
215
|
data: listTagsData
|
|
186
216
|
});
|
|
187
217
|
}
|
|
@@ -221,19 +251,34 @@ var Tags = function Tags(_ref) {
|
|
|
221
251
|
name: "tags",
|
|
222
252
|
beforeChange: function beforeChange(tags, baseOnChange) {
|
|
223
253
|
var formattedTags = tags.map(function (tag) {
|
|
224
|
-
|
|
254
|
+
var tagInLowerCase = tag.toLowerCase();
|
|
255
|
+
/**
|
|
256
|
+
* If "scope" exists, prefix tag with "scope" if not already.
|
|
257
|
+
*/
|
|
258
|
+
|
|
259
|
+
if (queryParams.scope && !tagInLowerCase.startsWith(queryParams.scope)) {
|
|
260
|
+
return "".concat(queryParams.scope).concat(SCOPE_SEPARATOR).concat(tagInLowerCase);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return tagInLowerCase;
|
|
225
264
|
});
|
|
226
265
|
baseOnChange(formattedTags);
|
|
227
266
|
}
|
|
228
|
-
},
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
267
|
+
}, function (_ref6) {
|
|
268
|
+
var value = _ref6.value,
|
|
269
|
+
bindProps = _objectWithoutProperties(_ref6, _excluded);
|
|
270
|
+
|
|
271
|
+
return /*#__PURE__*/React.createElement(MultiAutoComplete, Object.assign({}, bindProps, {
|
|
272
|
+
value: tagWithoutScopePrefix(value, queryParams.scope),
|
|
273
|
+
options: allTags,
|
|
274
|
+
placeholder: "homepage asset",
|
|
275
|
+
description: "Type in a new tag or select an existing one.",
|
|
276
|
+
unique: true,
|
|
277
|
+
allowFreeInput: true,
|
|
278
|
+
useSimpleValues: true,
|
|
279
|
+
disabled: saving
|
|
280
|
+
}));
|
|
281
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
237
282
|
className: actionWrapperStyle
|
|
238
283
|
}, /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
239
284
|
small: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Tags.tsx"],"names":["React","useCallback","useState","classNames","css","useApolloClient","useQuery","set","get","cloneDeep","Chips","Chip","ButtonSecondary","ButtonPrimary","ButtonDefault","IconButton","MultiAutoComplete","Icon","Form","useSnackbar","useFileManager","UPDATE_FILE","LIST_FILES","LIST_TAGS","ReactComponent","EditIcon","LabelIcon","chipsStyle","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","editing","setEdit","saving","setSaving","Array","isArray","tags","initialTags","setInitialTags","showSnackbar","queryParams","handleEdit","listTagsQuery","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","map","tag","index","label","name","mutate","mutation","variables","id","update","cache","updated","newFileData","readQuery","query","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","listTags","includes","push","then","Bind","setValue","submit","baseOnChange","formattedTags","toLowerCase","ev"],"mappings":"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","sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS);\n const allTags = get(listTagsQuery, \"data.fileManager.listTags\") || [];\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags.map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return <Chip key={label + index} label={label} />;\n })}\n </Chips>\n {isEditingAllowed && (\n <IconButton\n className={iconButtonStyle}\n icon={<EditIcon />}\n onClick={handleEdit}\n />\n )}\n </>\n );\n }\n // Render \"add tags\" action.\n return (\n <ButtonDefault\n className={addTagsStyle}\n onClick={handleEdit}\n disabled={!isEditingAllowed}\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => tag.toLowerCase());\n baseOnChange(formattedTags);\n }}\n >\n <MultiAutoComplete\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"]}
|
|
1
|
+
{"version":3,"sources":["Tags.tsx"],"names":["React","useCallback","useState","classNames","css","useApolloClient","useQuery","set","get","cloneDeep","Chips","Chip","ButtonSecondary","ButtonPrimary","ButtonDefault","IconButton","MultiAutoComplete","Icon","Form","useSnackbar","getWhere","useFileManager","UPDATE_FILE","LIST_FILES","LIST_TAGS","ReactComponent","EditIcon","LabelIcon","SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","showSnackbar","queryParams","handleEdit","listTagsQuery","variables","where","listTags","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","index","label","name","mutate","mutation","id","update","cache","updated","newFileData","readQuery","query","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"mappings":"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","sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { getWhere, useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst SCOPE_SEPARATOR = \":\";\n\nexport const formatTagAsLabel = (tag: string, scope: string | undefined) => {\n if (!scope) {\n return tag;\n }\n return tag.replace(`${scope}${SCOPE_SEPARATOR}`, \"\");\n};\n\nexport const tagWithoutScopePrefix = (tags: string[], scope: string) => {\n return tags.filter(tag => tag !== scope).map(tag => formatTagAsLabel(tag, scope));\n};\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\n\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS, {\n variables: { where: getWhere(queryParams.scope) }\n });\n const listTags = get(listTagsQuery, \"data.fileManager.listTags\", []);\n const allTags = tagWithoutScopePrefix(listTags, queryParams.scope);\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags\n .filter(tag => tag !== queryParams.scope)\n .map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return (\n <Chip\n key={label + index}\n label={formatTagAsLabel(label, queryParams.scope)}\n />\n );\n })}\n </Chips>\n {isEditingAllowed && (\n <IconButton\n className={iconButtonStyle}\n icon={<EditIcon />}\n onClick={handleEdit}\n />\n )}\n </>\n );\n }\n // Render \"add tags\" action.\n return (\n <ButtonDefault\n className={addTagsStyle}\n onClick={handleEdit}\n disabled={!isEditingAllowed}\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => {\n const tagInLowerCase = tag.toLowerCase();\n /**\n * If \"scope\" exists, prefix tag with \"scope\" if not already.\n */\n if (\n queryParams.scope &&\n !tagInLowerCase.startsWith(queryParams.scope)\n ) {\n return `${queryParams.scope}${SCOPE_SEPARATOR}${tagInLowerCase}`;\n }\n return tagInLowerCase;\n });\n baseOnChange(formattedTags);\n }}\n >\n {({ value, ...bindProps }) => (\n <MultiAutoComplete\n {...bindProps}\n value={tagWithoutScopePrefix(value, queryParams.scope)}\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n )}\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"]}
|
|
@@ -33,7 +33,7 @@ import { ReactComponent as ImageIcon } from "../../assets/icons/insert_photo-24p
|
|
|
33
33
|
import { ReactComponent as FileIcon } from "../../assets/icons/insert_drive_file-24px.svg";
|
|
34
34
|
import { ReactComponent as CalendarIcon } from "../../assets/icons/today-24px.svg";
|
|
35
35
|
import { ReactComponent as HighlightIcon } from "../../assets/icons/highlight-24px.svg";
|
|
36
|
-
import { useFileManager } from "./FileManagerContext";
|
|
36
|
+
import { getWhere, useFileManager } from "./FileManagerContext";
|
|
37
37
|
import { useMutation } from "@apollo/react-hooks";
|
|
38
38
|
import { useSnackbar } from "../../hooks/useSnackbar";
|
|
39
39
|
import { useSecurity } from "@webiny/app-security";
|
|
@@ -260,7 +260,10 @@ var FileDetails = function FileDetails(props) {
|
|
|
260
260
|
|
|
261
261
|
// Get tags from cache
|
|
262
262
|
var listTagsData = cloneDeep(cache.readQuery({
|
|
263
|
-
query: LIST_TAGS
|
|
263
|
+
query: LIST_TAGS,
|
|
264
|
+
variables: {
|
|
265
|
+
where: getWhere(queryParams.scope)
|
|
266
|
+
}
|
|
264
267
|
})); // Remove selected file tags from list.
|
|
265
268
|
|
|
266
269
|
// Remove selected file tags from list.
|
|
@@ -275,6 +278,9 @@ var FileDetails = function FileDetails(props) {
|
|
|
275
278
|
// Write it to cache
|
|
276
279
|
cache.writeQuery({
|
|
277
280
|
query: LIST_TAGS,
|
|
281
|
+
variables: {
|
|
282
|
+
where: getWhere(queryParams.scope)
|
|
283
|
+
},
|
|
278
284
|
data: set(data, "fileManager.listTags", filteredTags)
|
|
279
285
|
});
|
|
280
286
|
}
|