@webiny/app-admin 5.34.4 → 5.34.5-beta.1
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.js.map +1 -1
- package/components/AppInstaller/Sidebar.js.map +1 -1
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +1 -1
- package/components/FileManager/BottomInfoBar/UploadStatus.js.map +1 -1
- package/components/FileManager/DropFilesHere.js.map +1 -1
- package/components/FileManager/FileDetails/Tags.js.map +1 -1
- package/components/FileManager/FileManagerView.js.map +1 -1
- package/components/FileManager/LeftSidebar.js.map +1 -1
- package/components/FileManager/NoResults.js.map +1 -1
- package/package.json +15 -15
- package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -1
- package/plugins/fileManager/fileImage/EditAction.js.map +1 -1
- package/plugins/globalSearch/SearchBar.js.map +1 -1
- package/plugins/globalSearch/SearchBarDropdown.js.map +1 -1
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AppInstaller","children","tenantId","localStorage","get","lsKey","wbyVersion","appConfig","getKey","process","env","REACT_APP_WEBINY_VERSION","isRootTenant","isCypressTest","window","Cypress","markInstallerAsCompleted","set","isInstallerCompleted","useState","finished","setFinished","useSecurity","identity","useInstaller","isInstalled","loading","installers","installer","isFirstInstall","showNextInstaller","showLogin","onUser","skippingVersions","useEffect","renderLayout","content","secure","installerSplitView","renderBody","length","render","onInstalled","alertClass","latest","current","availableUpgrades","filter","v","map","opacity"],"sources":["AppInstaller.tsx"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["AppInstaller","children","tenantId","localStorage","get","lsKey","wbyVersion","appConfig","getKey","process","env","REACT_APP_WEBINY_VERSION","isRootTenant","isCypressTest","window","Cypress","markInstallerAsCompleted","set","isInstallerCompleted","useState","finished","setFinished","useSecurity","identity","useInstaller","isInstalled","loading","installers","installer","isFirstInstall","showNextInstaller","showLogin","onUser","skippingVersions","useEffect","renderLayout","content","secure","installerSplitView","renderBody","length","render","onInstalled","alertClass","latest","current","availableUpgrades","filter","v","map","opacity"],"sources":["AppInstaller.tsx"],"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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Logo","styled","padding","borderBottom","List","li","display","alignItems","borderRadius","height","width","marginRight","textAlign","lineHeight","fontSize","paddingTop","color","img","backgroundColor","fontWeight","Note","Installations","props","title","allInstallers","installer","showLogin","renderList","loginItem","signInDivider","items","i","length","name","secure","installed","prev","push","active","classSet","pending","Sidebar","upgrades","filter","type","installations","wbyVersion","appConfig","getKey","process","env","REACT_APP_WEBINY_VERSION","location"],"sources":["Sidebar.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport classSet from \"classnames\";\nimport styled from \"@emotion/styled\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { config as appConfig } from \"@webiny/app/config\";\nimport signInDivider from \"./assets/sign-in-divider.svg\";\nimport { Installer } from \"./useInstaller\";\nimport { Brand } from \"~/base/ui/Brand\";\nimport { Tags } from \"~/base/ui/Tags\";\n\nconst Logo = styled(\"div\")({\n padding: 15,\n borderBottom: \"1px solid var(--mdc-theme-background)\"\n});\n\nconst List = styled(\"ul\")({\n li: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"15px 15px\",\n \".status\": {\n borderRadius: \"50%\",\n display: \"inline-block\",\n height: 20,\n width: 20,\n marginRight: 15\n },\n \"&.sign-in\": {\n display: \"block\",\n textAlign: \"center\",\n \".note\": {\n display: \"inline-block\",\n lineHeight: \"150%\",\n fontSize: 10,\n paddingTop: 10,\n color: \"var(--mdc-theme-text-icon-on-background)\"\n },\n img: {\n width: \"100%\"\n }\n },\n \"&.active\": {\n backgroundColor: \"var(--mdc-theme-background)\",\n fontWeight: 600,\n \".status\": {\n backgroundColor: \"var(--mdc-theme-primary)\"\n }\n },\n \"&.pending\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-on-surface)\"\n }\n },\n \"&.installed\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-secondary)\"\n }\n }\n }\n});\n\nconst Note = styled(\"div\")({\n padding: 15\n});\ninterface InstallationsProps {\n title: React.ReactNode;\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\nconst Installations: React.FC<InstallationsProps> = props => {\n const { title, allInstallers, installer, showLogin } = props;\n const renderList = () => {\n const loginItem = (\n <li key={\"login\"} className={\"sign-in\"}>\n <img src={signInDivider} alt={\"\"} />\n <Typography use={\"overline\"} className={\"note\"}>\n TO CONTINUE THE INSTALLATION AFTER THIS POINT YOU’LL NEED TO SIGN IN\n </Typography>\n </li>\n );\n\n const items = [];\n for (let i = 0; i < allInstallers.length; i++) {\n const { name, title, secure, installed } = allInstallers[i];\n const prev = i === 0 ? null : allInstallers[i - 1];\n if ((!prev || !prev.secure) && secure && showLogin) {\n items.push(loginItem);\n }\n\n const active = installer && !showLogin && name === installer.name;\n\n items.push(\n <li\n key={name}\n className={classSet(\n { installed: installed },\n { active: active },\n { pending: !installed && !active }\n )}\n >\n <span className={\"status\"} />\n <span className={\"title\"}>{title}</span>\n </li>\n );\n }\n return items;\n };\n\n return (\n <Fragment>\n <Note>\n <Typography use={\"body1\"}>{title}</Typography>\n </Note>\n <List>{renderList()}</List>\n </Fragment>\n );\n};\n\ninterface SidebarProps {\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\n\nconst Sidebar: React.FC<SidebarProps> = ({ allInstallers, installer, showLogin }) => {\n const upgrades = allInstallers.filter(installer => installer.type === \"upgrade\");\n const installations = allInstallers.filter(installer => installer.type === \"install\");\n const wbyVersion = appConfig.getKey(\"WEBINY_VERSION\", process.env.REACT_APP_WEBINY_VERSION);\n\n return (\n <Tags tags={{ location: \"installer\" }}>\n <Logo>\n <Brand />\n </Logo>\n {upgrades.length > 0 ? (\n <Installations\n title={\n <span>\n The following apps will be upgraded to <strong>{wbyVersion}</strong>:\n </span>\n }\n allInstallers={upgrades}\n installer={installer}\n showLogin={showLogin}\n />\n ) : null}\n {installations.length > 0 && (\n <Installations\n title={\"The following apps will be installed and configured:\"}\n allInstallers={installations}\n installer={installer}\n showLogin={upgrades.length > 0 ? false : showLogin}\n />\n )}\n </Tags>\n );\n};\nexport default Sidebar;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA,IAAMA,IAAI,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACvBC,OAAO,EAAE,EADc;EAEvBC,YAAY,EAAE;AAFS,CAAjB,CAAV;AAKA,IAAMC,IAAI,oBAAGH,eAAH,EAAU,IAAV;EAAA;EAAA;AAAA,GAAgB;EACtBI,EAAE,EAAE;IACAC,OAAO,EAAE,MADT;IAEAC,UAAU,EAAE,QAFZ;IAGAL,OAAO,EAAE,WAHT;IAIA,WAAW;MACPM,YAAY,EAAE,KADP;MAEPF,OAAO,EAAE,cAFF;MAGPG,MAAM,EAAE,EAHD;MAIPC,KAAK,EAAE,EAJA;MAKPC,WAAW,EAAE;IALN,CAJX;IAWA,aAAa;MACTL,OAAO,EAAE,OADA;MAETM,SAAS,EAAE,QAFF;MAGT,SAAS;QACLN,OAAO,EAAE,cADJ;QAELO,UAAU,EAAE,MAFP;QAGLC,QAAQ,EAAE,EAHL;QAILC,UAAU,EAAE,EAJP;QAKLC,KAAK,EAAE;MALF,CAHA;MAUTC,GAAG,EAAE;QACDP,KAAK,EAAE;MADN;IAVI,CAXb;IAyBA,YAAY;MACRQ,eAAe,EAAE,6BADT;MAERC,UAAU,EAAE,GAFJ;MAGR,WAAW;QACPD,eAAe,EAAE;MADV;IAHH,CAzBZ;IAgCA,aAAa;MACT,WAAW;QACPA,eAAe,EAAE;MADV;IADF,CAhCb;IAqCA,eAAe;MACX,WAAW;QACPA,eAAe,EAAE;MADV;IADA;EArCf;AADkB,CAAhB,CAAV;AA8CA,IAAME,IAAI,oBAAGnB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACvBC,OAAO,EAAE;AADc,CAAjB,CAAV;;AASA,IAAMmB,aAA2C,GAAG,SAA9CA,aAA8C,CAAAC,KAAK,EAAI;EACzD,IAAQC,KAAR,GAAuDD,KAAvD,CAAQC,KAAR;EAAA,IAAeC,aAAf,GAAuDF,KAAvD,CAAeE,aAAf;EAAA,IAA8BC,SAA9B,GAAuDH,KAAvD,CAA8BG,SAA9B;EAAA,IAAyCC,SAAzC,GAAuDJ,KAAvD,CAAyCI,SAAzC;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,GAAM;IACrB,IAAMC,SAAS,gBACX;MAAI,GAAG,EAAE,OAAT;MAAkB,SAAS,EAAE;IAA7B,gBACI;MAAK,GAAG,EAAEC,sBAAV;MAAyB,GAAG,EAAE;IAA9B,EADJ,eAEI,6BAAC,sBAAD;MAAY,GAAG,EAAE,UAAjB;MAA6B,SAAS,EAAE;IAAxC
|
|
1
|
+
{"version":3,"names":["Logo","styled","padding","borderBottom","List","li","display","alignItems","borderRadius","height","width","marginRight","textAlign","lineHeight","fontSize","paddingTop","color","img","backgroundColor","fontWeight","Note","Installations","props","title","allInstallers","installer","showLogin","renderList","loginItem","signInDivider","items","i","length","name","secure","installed","prev","push","active","classSet","pending","Sidebar","upgrades","filter","type","installations","wbyVersion","appConfig","getKey","process","env","REACT_APP_WEBINY_VERSION","location"],"sources":["Sidebar.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport classSet from \"classnames\";\nimport styled from \"@emotion/styled\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { config as appConfig } from \"@webiny/app/config\";\nimport signInDivider from \"./assets/sign-in-divider.svg\";\nimport { Installer } from \"./useInstaller\";\nimport { Brand } from \"~/base/ui/Brand\";\nimport { Tags } from \"~/base/ui/Tags\";\n\nconst Logo = styled(\"div\")({\n padding: 15,\n borderBottom: \"1px solid var(--mdc-theme-background)\"\n});\n\nconst List = styled(\"ul\")({\n li: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"15px 15px\",\n \".status\": {\n borderRadius: \"50%\",\n display: \"inline-block\",\n height: 20,\n width: 20,\n marginRight: 15\n },\n \"&.sign-in\": {\n display: \"block\",\n textAlign: \"center\",\n \".note\": {\n display: \"inline-block\",\n lineHeight: \"150%\",\n fontSize: 10,\n paddingTop: 10,\n color: \"var(--mdc-theme-text-icon-on-background)\"\n },\n img: {\n width: \"100%\"\n }\n },\n \"&.active\": {\n backgroundColor: \"var(--mdc-theme-background)\",\n fontWeight: 600,\n \".status\": {\n backgroundColor: \"var(--mdc-theme-primary)\"\n }\n },\n \"&.pending\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-on-surface)\"\n }\n },\n \"&.installed\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-secondary)\"\n }\n }\n }\n});\n\nconst Note = styled(\"div\")({\n padding: 15\n});\ninterface InstallationsProps {\n title: React.ReactNode;\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\nconst Installations: React.FC<InstallationsProps> = props => {\n const { title, allInstallers, installer, showLogin } = props;\n const renderList = () => {\n const loginItem = (\n <li key={\"login\"} className={\"sign-in\"}>\n <img src={signInDivider} alt={\"\"} />\n <Typography use={\"overline\"} className={\"note\"}>\n TO CONTINUE THE INSTALLATION AFTER THIS POINT YOU’LL NEED TO SIGN IN\n </Typography>\n </li>\n );\n\n const items = [];\n for (let i = 0; i < allInstallers.length; i++) {\n const { name, title, secure, installed } = allInstallers[i];\n const prev = i === 0 ? null : allInstallers[i - 1];\n if ((!prev || !prev.secure) && secure && showLogin) {\n items.push(loginItem);\n }\n\n const active = installer && !showLogin && name === installer.name;\n\n items.push(\n <li\n key={name}\n className={classSet(\n { installed: installed },\n { active: active },\n { pending: !installed && !active }\n )}\n >\n <span className={\"status\"} />\n <span className={\"title\"}>{title}</span>\n </li>\n );\n }\n return items;\n };\n\n return (\n <Fragment>\n <Note>\n <Typography use={\"body1\"}>{title}</Typography>\n </Note>\n <List>{renderList()}</List>\n </Fragment>\n );\n};\n\ninterface SidebarProps {\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\n\nconst Sidebar: React.FC<SidebarProps> = ({ allInstallers, installer, showLogin }) => {\n const upgrades = allInstallers.filter(installer => installer.type === \"upgrade\");\n const installations = allInstallers.filter(installer => installer.type === \"install\");\n const wbyVersion = appConfig.getKey(\"WEBINY_VERSION\", process.env.REACT_APP_WEBINY_VERSION);\n\n return (\n <Tags tags={{ location: \"installer\" }}>\n <Logo>\n <Brand />\n </Logo>\n {upgrades.length > 0 ? (\n <Installations\n title={\n <span>\n The following apps will be upgraded to <strong>{wbyVersion}</strong>:\n </span>\n }\n allInstallers={upgrades}\n installer={installer}\n showLogin={showLogin}\n />\n ) : null}\n {installations.length > 0 && (\n <Installations\n title={\"The following apps will be installed and configured:\"}\n allInstallers={installations}\n installer={installer}\n showLogin={upgrades.length > 0 ? false : showLogin}\n />\n )}\n </Tags>\n );\n};\nexport default Sidebar;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["mime","define","getUniqueFilePlugins","accept","exts","forEach","item","ext","getExtension","Object","keys","SupportedFileTypes","length","join"],"sources":["SupportedFileTypes.tsx"],"sourcesContent":["import React from \"react\";\nimport mime from \"mime/lite\";\n\nmime.define({ \"image/x-icon\": [\"ico\"] }, true);\nmime.define({ \"image/jpg\": [\"jpg\"] }, true);\nmime.define({ \"image/vnd.microsoft.icon\": [\"ico\"] }, true);\n\nconst getUniqueFilePlugins = (accept: string[]): string[] => {\n const exts: Record<string, boolean> = {};\n accept.forEach(item => {\n const ext = mime.getExtension(item);\n if (!ext) {\n return;\n }\n exts[ext] = true;\n });\n\n return Object.keys(exts);\n};\n\nexport interface SupportedFileTypesProps {\n accept: string[];\n}\n\nconst SupportedFileTypes: React.FC<SupportedFileTypesProps> = ({ accept }) => {\n if (!accept) {\n return null;\n }\n\n if (accept.length === 0) {\n return <span>Showing all file extensions.</span>;\n }\n\n return (\n <span>\n Showing the following file extensions: {getUniqueFilePlugins(accept).join(\", \")}.\n </span>\n );\n};\n\nexport default SupportedFileTypes;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEAA,aAAA,CAAKC,MAAL,CAAY;EAAE,gBAAgB,CAAC,KAAD;AAAlB,CAAZ,EAAyC,IAAzC;;AACAD,aAAA,CAAKC,MAAL,CAAY;EAAE,aAAa,CAAC,KAAD;AAAf,CAAZ,EAAsC,IAAtC;;AACAD,aAAA,CAAKC,MAAL,CAAY;EAAE,4BAA4B,CAAC,KAAD;AAA9B,CAAZ,EAAqD,IAArD;;AAEA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,MAAD,EAAgC;EACzD,IAAMC,IAA6B,GAAG,EAAtC;EACAD,MAAM,CAACE,OAAP,CAAe,UAAAC,IAAI,EAAI;IACnB,IAAMC,GAAG,GAAGP,aAAA,CAAKQ,YAAL,CAAkBF,IAAlB,CAAZ;;IACA,IAAI,CAACC,GAAL,EAAU;MACN;IACH;;IACDH,IAAI,CAACG,GAAD,CAAJ,GAAY,IAAZ;EACH,CAND;EAQA,OAAOE,MAAM,CAACC,IAAP,CAAYN,IAAZ,CAAP;AACH,CAXD;;AAiBA,IAAMO,kBAAqD,GAAG,SAAxDA,kBAAwD,OAAgB;EAAA,IAAbR,MAAa,QAAbA,MAAa;;EAC1E,IAAI,CAACA,MAAL,EAAa;IACT,OAAO,IAAP;EACH;;EAED,IAAIA,MAAM,CAACS,MAAP,KAAkB,CAAtB,EAAyB;IACrB,oBAAO,
|
|
1
|
+
{"version":3,"names":["mime","define","getUniqueFilePlugins","accept","exts","forEach","item","ext","getExtension","Object","keys","SupportedFileTypes","length","join"],"sources":["SupportedFileTypes.tsx"],"sourcesContent":["import React from \"react\";\nimport mime from \"mime/lite\";\n\nmime.define({ \"image/x-icon\": [\"ico\"] }, true);\nmime.define({ \"image/jpg\": [\"jpg\"] }, true);\nmime.define({ \"image/vnd.microsoft.icon\": [\"ico\"] }, true);\n\nconst getUniqueFilePlugins = (accept: string[]): string[] => {\n const exts: Record<string, boolean> = {};\n accept.forEach(item => {\n const ext = mime.getExtension(item);\n if (!ext) {\n return;\n }\n exts[ext] = true;\n });\n\n return Object.keys(exts);\n};\n\nexport interface SupportedFileTypesProps {\n accept: string[];\n}\n\nconst SupportedFileTypes: React.FC<SupportedFileTypesProps> = ({ accept }) => {\n if (!accept) {\n return null;\n }\n\n if (accept.length === 0) {\n return <span>Showing all file extensions.</span>;\n }\n\n return (\n <span>\n Showing the following file extensions: {getUniqueFilePlugins(accept).join(\", \")}.\n </span>\n );\n};\n\nexport default SupportedFileTypes;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEAA,aAAA,CAAKC,MAAL,CAAY;EAAE,gBAAgB,CAAC,KAAD;AAAlB,CAAZ,EAAyC,IAAzC;;AACAD,aAAA,CAAKC,MAAL,CAAY;EAAE,aAAa,CAAC,KAAD;AAAf,CAAZ,EAAsC,IAAtC;;AACAD,aAAA,CAAKC,MAAL,CAAY;EAAE,4BAA4B,CAAC,KAAD;AAA9B,CAAZ,EAAqD,IAArD;;AAEA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,MAAD,EAAgC;EACzD,IAAMC,IAA6B,GAAG,EAAtC;EACAD,MAAM,CAACE,OAAP,CAAe,UAAAC,IAAI,EAAI;IACnB,IAAMC,GAAG,GAAGP,aAAA,CAAKQ,YAAL,CAAkBF,IAAlB,CAAZ;;IACA,IAAI,CAACC,GAAL,EAAU;MACN;IACH;;IACDH,IAAI,CAACG,GAAD,CAAJ,GAAY,IAAZ;EACH,CAND;EAQA,OAAOE,MAAM,CAACC,IAAP,CAAYN,IAAZ,CAAP;AACH,CAXD;;AAiBA,IAAMO,kBAAqD,GAAG,SAAxDA,kBAAwD,OAAgB;EAAA,IAAbR,MAAa,QAAbA,MAAa;;EAC1E,IAAI,CAACA,MAAL,EAAa;IACT,OAAO,IAAP;EACH;;EAED,IAAIA,MAAM,CAACS,MAAP,KAAkB,CAAtB,EAAyB;IACrB,oBAAO,2CAAM,8BAAN,CAAP;EACH;;EAED,oBACI,2CAAM,yCAAN,EAC4CV,oBAAoB,CAACC,MAAD,CAApB,CAA6BU,IAA7B,CAAkC,IAAlC,CAD5C,EACoF,GADpF,CADJ;AAKH,CAdD;;eAgBeF,kB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StatusWrapper","styled","color","position","right","bottom","marginRight","display","alignItems","CircularProgressHolder","height","width","UploadingLabel","UploadStatus","uploading"],"sources":["UploadStatus.tsx"],"sourcesContent":["import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\n\nconst StatusWrapper = styled(\"div\")({\n color: \"var(--mdc-theme-primary)\",\n position: \"absolute\",\n right: 0,\n bottom: 10,\n marginRight: 10,\n display: \"flex\",\n alignItems: \"center\",\n \"> div\": {\n display: \"inline-block\"\n }\n});\n\nconst CircularProgressHolder = styled(\"div\")({\n position: \"relative\",\n height: 12,\n width: 12\n});\n\nconst UploadingLabel = styled(\"div\")({\n marginRight: 5\n});\n\nexport interface UploadStatusProps {\n uploading: boolean;\n}\nconst UploadStatus: React.FC<UploadStatusProps> = ({ uploading }) => {\n if (!uploading) {\n return null;\n }\n\n return (\n <StatusWrapper>\n <UploadingLabel>Uploading...</UploadingLabel>\n <CircularProgressHolder>\n <CircularProgress size={10} spinnerWidth={1} />\n </CircularProgressHolder>\n </StatusWrapper>\n );\n};\n\nexport default UploadStatus;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,aAAa,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAChCC,KAAK,EAAE,0BADyB;EAEhCC,QAAQ,EAAE,UAFsB;EAGhCC,KAAK,EAAE,CAHyB;EAIhCC,MAAM,EAAE,EAJwB;EAKhCC,WAAW,EAAE,EALmB;EAMhCC,OAAO,EAAE,MANuB;EAOhCC,UAAU,EAAE,QAPoB;EAQhC,SAAS;IACLD,OAAO,EAAE;EADJ;AARuB,CAAjB,CAAnB;AAaA,IAAME,sBAAsB,oBAAGR,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACzCE,QAAQ,EAAE,UAD+B;EAEzCO,MAAM,EAAE,EAFiC;EAGzCC,KAAK,EAAE;AAHkC,CAAjB,CAA5B;AAMA,IAAMC,cAAc,oBAAGX,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACjCK,WAAW,EAAE;AADoB,CAAjB,CAApB;;AAOA,IAAMO,YAAyC,GAAG,SAA5CA,YAA4C,OAAmB;EAAA,IAAhBC,SAAgB,QAAhBA,SAAgB;;EACjE,IAAI,CAACA,SAAL,EAAgB;IACZ,OAAO,IAAP;EACH;;EAED,oBACI,6BAAC,aAAD,qBACI,6BAAC,cAAD,
|
|
1
|
+
{"version":3,"names":["StatusWrapper","styled","color","position","right","bottom","marginRight","display","alignItems","CircularProgressHolder","height","width","UploadingLabel","UploadStatus","uploading"],"sources":["UploadStatus.tsx"],"sourcesContent":["import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\n\nconst StatusWrapper = styled(\"div\")({\n color: \"var(--mdc-theme-primary)\",\n position: \"absolute\",\n right: 0,\n bottom: 10,\n marginRight: 10,\n display: \"flex\",\n alignItems: \"center\",\n \"> div\": {\n display: \"inline-block\"\n }\n});\n\nconst CircularProgressHolder = styled(\"div\")({\n position: \"relative\",\n height: 12,\n width: 12\n});\n\nconst UploadingLabel = styled(\"div\")({\n marginRight: 5\n});\n\nexport interface UploadStatusProps {\n uploading: boolean;\n}\nconst UploadStatus: React.FC<UploadStatusProps> = ({ uploading }) => {\n if (!uploading) {\n return null;\n }\n\n return (\n <StatusWrapper>\n <UploadingLabel>Uploading...</UploadingLabel>\n <CircularProgressHolder>\n <CircularProgress size={10} spinnerWidth={1} />\n </CircularProgressHolder>\n </StatusWrapper>\n );\n};\n\nexport default UploadStatus;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,aAAa,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAChCC,KAAK,EAAE,0BADyB;EAEhCC,QAAQ,EAAE,UAFsB;EAGhCC,KAAK,EAAE,CAHyB;EAIhCC,MAAM,EAAE,EAJwB;EAKhCC,WAAW,EAAE,EALmB;EAMhCC,OAAO,EAAE,MANuB;EAOhCC,UAAU,EAAE,QAPoB;EAQhC,SAAS;IACLD,OAAO,EAAE;EADJ;AARuB,CAAjB,CAAnB;AAaA,IAAME,sBAAsB,oBAAGR,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACzCE,QAAQ,EAAE,UAD+B;EAEzCO,MAAM,EAAE,EAFiC;EAGzCC,KAAK,EAAE;AAHkC,CAAjB,CAA5B;AAMA,IAAMC,cAAc,oBAAGX,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACjCK,WAAW,EAAE;AADoB,CAAjB,CAApB;;AAOA,IAAMO,YAAyC,GAAG,SAA5CA,YAA4C,OAAmB;EAAA,IAAhBC,SAAgB,QAAhBA,SAAgB;;EACjE,IAAI,CAACA,SAAL,EAAgB;IACZ,OAAO,IAAP;EACH;;EAED,oBACI,6BAAC,aAAD,qBACI,6BAAC,cAAD,QAAgB,cAAhB,CADJ,eAEI,6BAAC,sBAAD,qBACI,6BAAC,0BAAD;IAAkB,IAAI,EAAE,EAAxB;IAA4B,YAAY,EAAE;EAA1C,EADJ,CAFJ,CADJ;AAQH,CAbD;;eAeeD,Y"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["styles","css","margin","paddingTop","height","zIndex","width","position","backgroundColor","textAlign","borderRadius","left","top","transform","color","display","DropFilesHere","onDrop","onDragLeave","empty","onClick","classNames"],"sources":["DropFilesHere.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { Icon } from \"@webiny/ui/Icon\";\n\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\n\nconst styles = css({\n margin: \"0 auto\",\n paddingTop: 0,\n height: \"100%\",\n zIndex: 2,\n width: \"100%\",\n position: \"absolute\",\n backgroundColor: \"var(--mdc-theme-text-hint-on-light)\",\n \"&.empty\": {\n backgroundColor: \"transparent\",\n \"> div\": {\n backgroundColor: \"var(--mdc-theme-surface)\"\n }\n },\n \"> div\": {\n textAlign: \"center\",\n width: 300,\n height: 300,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderRadius: \"50%\",\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translateX(-50%) translateY(-100%)\",\n \"> div\": {\n position: \"absolute\",\n top: 90,\n width: 300,\n color: \"var(--mdc-theme-on-surface)\",\n \"svg.mdc-button__icon\": {\n width: 100,\n display: \"inline-block\",\n color: \"var(--mdc-theme-on-surface)\"\n }\n }\n }\n});\n\nexport interface DropFilesHereProps {\n onDragLeave?: (event?: React.DragEvent<HTMLElement>) => void;\n onDrop?: (event?: React.DragEvent<HTMLElement>) => void;\n empty?: boolean;\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n}\n\nconst DropFilesHere: React.FC<DropFilesHereProps> = ({ onDrop, onDragLeave, empty, onClick }) => {\n return (\n <div\n className={classNames(styles, { empty })}\n onDrop={onDrop}\n onClick={onClick}\n onDragLeave={onDragLeave}\n >\n <div>\n <div>\n <Icon icon={<UploadIcon />} />\n <div>Drop files here</div>\n </div>\n </div>\n </div>\n );\n};\nexport default DropFilesHere;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,MAAM,gBAAG,IAAAC,YAAA,EAAI;EACfC,MAAM,EAAE,QADO;EAEfC,UAAU,EAAE,CAFG;EAGfC,MAAM,EAAE,MAHO;EAIfC,MAAM,EAAE,CAJO;EAKfC,KAAK,EAAE,MALQ;EAMfC,QAAQ,EAAE,UANK;EAOfC,eAAe,EAAE,qCAPF;EAQf,WAAW;IACPA,eAAe,EAAE,aADV;IAEP,SAAS;MACLA,eAAe,EAAE;IADZ;EAFF,CARI;EAcf,SAAS;IACLC,SAAS,EAAE,QADN;IAELH,KAAK,EAAE,GAFF;IAGLF,MAAM,EAAE,GAHH;IAILI,eAAe,EAAE,6BAJZ;IAKLE,YAAY,EAAE,KALT;IAMLH,QAAQ,EAAE,UANL;IAOLI,IAAI,EAAE,KAPD;IAQLC,GAAG,EAAE,KARA;IASLC,SAAS,EAAE,oCATN;IAUL,SAAS;MACLN,QAAQ,EAAE,UADL;MAELK,GAAG,EAAE,EAFA;MAGLN,KAAK,EAAE,GAHF;MAILQ,KAAK,EAAE,6BAJF;MAKL,wBAAwB;QACpBR,KAAK,EAAE,GADa;QAEpBS,OAAO,EAAE,cAFW;QAGpBD,KAAK,EAAE;MAHa;IALnB;EAVJ;AAdM,CAAJ,kBAAf;;AA6CA,IAAME,aAA2C,GAAG,SAA9CA,aAA8C,OAA6C;EAAA,IAA1CC,MAA0C,QAA1CA,MAA0C;EAAA,IAAlCC,WAAkC,QAAlCA,WAAkC;EAAA,IAArBC,KAAqB,QAArBA,KAAqB;EAAA,IAAdC,OAAc,QAAdA,OAAc;EAC7F,oBACI;IACI,SAAS,EAAE,IAAAC,mBAAA,EAAWrB,MAAX,EAAmB;MAAEmB,KAAK,EAALA;IAAF,CAAnB,CADf;IAEI,MAAM,EAAEF,MAFZ;IAGI,OAAO,EAAEG,OAHb;IAII,WAAW,EAAEF;EAJjB,gBAMI,uDACI,uDACI,6BAAC,UAAD;IAAM,IAAI,eAAE,6BAAC,qCAAD;EAAZ,EADJ,eAEI,
|
|
1
|
+
{"version":3,"names":["styles","css","margin","paddingTop","height","zIndex","width","position","backgroundColor","textAlign","borderRadius","left","top","transform","color","display","DropFilesHere","onDrop","onDragLeave","empty","onClick","classNames"],"sources":["DropFilesHere.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { Icon } from \"@webiny/ui/Icon\";\n\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\n\nconst styles = css({\n margin: \"0 auto\",\n paddingTop: 0,\n height: \"100%\",\n zIndex: 2,\n width: \"100%\",\n position: \"absolute\",\n backgroundColor: \"var(--mdc-theme-text-hint-on-light)\",\n \"&.empty\": {\n backgroundColor: \"transparent\",\n \"> div\": {\n backgroundColor: \"var(--mdc-theme-surface)\"\n }\n },\n \"> div\": {\n textAlign: \"center\",\n width: 300,\n height: 300,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderRadius: \"50%\",\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translateX(-50%) translateY(-100%)\",\n \"> div\": {\n position: \"absolute\",\n top: 90,\n width: 300,\n color: \"var(--mdc-theme-on-surface)\",\n \"svg.mdc-button__icon\": {\n width: 100,\n display: \"inline-block\",\n color: \"var(--mdc-theme-on-surface)\"\n }\n }\n }\n});\n\nexport interface DropFilesHereProps {\n onDragLeave?: (event?: React.DragEvent<HTMLElement>) => void;\n onDrop?: (event?: React.DragEvent<HTMLElement>) => void;\n empty?: boolean;\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n}\n\nconst DropFilesHere: React.FC<DropFilesHereProps> = ({ onDrop, onDragLeave, empty, onClick }) => {\n return (\n <div\n className={classNames(styles, { empty })}\n onDrop={onDrop}\n onClick={onClick}\n onDragLeave={onDragLeave}\n >\n <div>\n <div>\n <Icon icon={<UploadIcon />} />\n <div>Drop files here</div>\n </div>\n </div>\n </div>\n );\n};\nexport default DropFilesHere;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,MAAM,gBAAG,IAAAC,YAAA,EAAI;EACfC,MAAM,EAAE,QADO;EAEfC,UAAU,EAAE,CAFG;EAGfC,MAAM,EAAE,MAHO;EAIfC,MAAM,EAAE,CAJO;EAKfC,KAAK,EAAE,MALQ;EAMfC,QAAQ,EAAE,UANK;EAOfC,eAAe,EAAE,qCAPF;EAQf,WAAW;IACPA,eAAe,EAAE,aADV;IAEP,SAAS;MACLA,eAAe,EAAE;IADZ;EAFF,CARI;EAcf,SAAS;IACLC,SAAS,EAAE,QADN;IAELH,KAAK,EAAE,GAFF;IAGLF,MAAM,EAAE,GAHH;IAILI,eAAe,EAAE,6BAJZ;IAKLE,YAAY,EAAE,KALT;IAMLH,QAAQ,EAAE,UANL;IAOLI,IAAI,EAAE,KAPD;IAQLC,GAAG,EAAE,KARA;IASLC,SAAS,EAAE,oCATN;IAUL,SAAS;MACLN,QAAQ,EAAE,UADL;MAELK,GAAG,EAAE,EAFA;MAGLN,KAAK,EAAE,GAHF;MAILQ,KAAK,EAAE,6BAJF;MAKL,wBAAwB;QACpBR,KAAK,EAAE,GADa;QAEpBS,OAAO,EAAE,cAFW;QAGpBD,KAAK,EAAE;MAHa;IALnB;EAVJ;AAdM,CAAJ,kBAAf;;AA6CA,IAAME,aAA2C,GAAG,SAA9CA,aAA8C,OAA6C;EAAA,IAA1CC,MAA0C,QAA1CA,MAA0C;EAAA,IAAlCC,WAAkC,QAAlCA,WAAkC;EAAA,IAArBC,KAAqB,QAArBA,KAAqB;EAAA,IAAdC,OAAc,QAAdA,OAAc;EAC7F,oBACI;IACI,SAAS,EAAE,IAAAC,mBAAA,EAAWrB,MAAX,EAAmB;MAAEmB,KAAK,EAALA;IAAF,CAAnB,CADf;IAEI,MAAM,EAAEF,MAFZ;IAGI,OAAO,EAAEG,OAHb;IAII,WAAW,EAAEF;EAJjB,gBAMI,uDACI,uDACI,6BAAC,UAAD;IAAM,IAAI,eAAE,6BAAC,qCAAD;EAAZ,EADJ,eAEI,0CAAK,iBAAL,CAFJ,CADJ,CANJ,CADJ;AAeH,CAhBD;;eAiBeF,a"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","useApolloClient","useState","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","label","name","mutate","mutation","UPDATE_FILE","id","update","cache","updated","newFileData","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"sources":["Tags.tsx"],"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 data-testid=\"fm.tags.add\"\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","useApolloClient","useState","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","label","name","mutate","mutation","UPDATE_FILE","id","update","cache","updated","newFileData","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"sources":["Tags.tsx"],"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 data-testid=\"fm.tags.add\"\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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","style","draggingFeedback","css","position","top","left","width","height","opacity","background","zIndex","leftDrawer","header","textAlign","fontSize","padding","fontWeight","color","InputSearch","styled","backgroundColor","borderRadius","border","marginLeft","outline","searchIcon","FileListWrapper","float","display","FileList","gridTemplateColumns","marginBottom","renderFile","props","file","plugin","getFileTypePlugin","id","render","renderEmpty","hasPreviouslyUploadedFiles","browseFiles","fmFilePermission","FileManagerView","onClose","onChange","accept","multiple","maxSize","multipleMaxCount","multipleMaxSize","onUploadCompletion","useFileManager","selected","toggleSelected","dragging","setDragging","uploading","setUploading","showFileDetails","showingFileDetails","queryParams","setQueryParams","setHasPreviouslyUploadedFiles","useSnackbar","showSnackbar","useSecurity","identity","getPermission","useMemo","canCreate","own","rwd","includes","canEdit","useCallback","item","creatorId","get","identityId","login","searchOnChange","debounce","search","toggleTag","tag","finalTags","Array","isArray","tags","splice","indexOf","push","getFileUploadErrorMessage","e","match","message","updateCacheAfterCreateFile","cache","newFile","newFileData","data","readQuery","query","LIST_FILES","variables","writeQuery","fileManager","listFiles","getFileDetailsFile","src","list","find","useHotkeys","keys","esc","searchInput","useRef","apolloClient","useApolloClient","gqlQuery","useQuery","onCompleted","response","length","refreshOnScroll","scrollFrame","fetchMore","cursor","after","updateQuery","prev","result","fetchMoreResult","next","loading","useMutation","CREATE_FILE","update","createFile","uploadFile","files","errors","uploadedFiles","Promise","all","map","getFileUploader","scope","createFileResponse","setTimeout","name","renderUploadFileAction","settingsQuery","GET_FILE_SETTINGS","settings","uploadMaxFileSize","filter","Boolean","console","log","outputFileSelectionError","getDropZoneProps","validateFiles","onDragEnter","onExited","target","value","current","onSelect","defaultProps"],"sources":["FileManagerView.tsx"],"sourcesContent":["import React, { useRef, useCallback, useMemo } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport Files, { FilesRenderChildren } from \"react-butterfiles\";\nimport { ButtonPrimary, ButtonIcon } from \"@webiny/ui/Button\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport File, { FileProps } from \"./File\";\nimport { useQuery, useMutation, useApolloClient } from \"@apollo/react-hooks\";\nimport { FilesRules } from \"react-butterfiles\";\nimport {\n LIST_FILES,\n CREATE_FILE,\n GET_FILE_SETTINGS,\n CreateFileMutationVariables,\n CreateFileMutationResponse,\n ListFilesQueryResponse,\n ListFilesQueryVariables\n} from \"./graphql\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport getFileUploader from \"./getFileUploader\";\nimport { outputFileSelectionError } from \"./outputFileSelectionError\";\nimport DropFilesHere from \"./DropFilesHere\";\nimport NoResults from \"./NoResults\";\nimport FileDetails from \"./FileDetails\";\nimport LeftSidebar from \"./LeftSidebar\";\nimport BottomInfoBar from \"./BottomInfoBar\";\nimport { OverlayLayout } from \"../OverlayLayout\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\n/**\n * Package react-hotkeyz is missing types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { useFileManager } from \"./FileManagerContext\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\nimport NoPermissionView from \"./NoPermissionView\";\nimport { FileItem, FileManagerSecurityPermission } from \"~/components/FileManager/types\";\nimport { MutationUpdaterFn } from \"apollo-client/core/watchQueryOptions\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\nimport { ObservableQueryFields } from \"@apollo/react-common/lib/types/types\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\nconst style = {\n draggingFeedback: css({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n opacity: 0.5,\n background: \"white\",\n zIndex: 100\n }),\n leftDrawer: {\n header: css({\n textAlign: \"center\",\n fontSize: 18,\n padding: 10,\n fontWeight: 600,\n color: \"var(--mdc-theme-on-surface)\"\n })\n }\n};\n\nconst InputSearch = styled(\"div\")({\n backgroundColor: \"var(--mdc-theme-on-background)\",\n position: \"relative\",\n height: 32,\n padding: 3,\n width: \"100%\",\n borderRadius: 2,\n \"> input\": {\n border: \"none\",\n fontSize: 14,\n width: \"calc(100% - 10px)\",\n height: \"100%\",\n marginLeft: 50,\n backgroundColor: \"transparent\",\n outline: \"none\",\n color: \"var(--mdc-theme-text-primary-on-background)\"\n }\n});\n\nconst searchIcon = css({\n \"&.mdc-button__icon\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n position: \"absolute\",\n width: 24,\n height: 24,\n left: 15,\n top: 7\n }\n});\n\nconst FileListWrapper = styled(\"div\")({\n float: \"right\",\n display: \"inline-block\",\n width: \"calc(100vw - 270px)\",\n height: \"100%\"\n});\n\nconst FileList = styled(\"div\")({\n width: \"100%\",\n display: \"grid\",\n /* define the number of grid columns */\n gridTemplateColumns: \"repeat( auto-fill, minmax(220px, 1fr) )\",\n marginBottom: 95\n});\n\nexport interface FileManagerViewProps {\n onChange?: Function;\n onClose?: Function;\n files?: FilesRules;\n multiple?: boolean; // Does not affect <Files> component, it always allows multiple selection.\n accept: Array<string>;\n maxSize?: number | string;\n multipleMaxCount?: number;\n multipleMaxSize?: number | string;\n onUploadCompletion?: Function;\n tags?: string[];\n scope?: string;\n own?: boolean;\n}\n\ninterface RenderFileProps extends Omit<FileProps, \"children\"> {\n file: FileItem;\n children?: React.ReactNode;\n}\nconst renderFile: React.FC<RenderFileProps> = props => {\n const { file } = props;\n const plugin = getFileTypePlugin(file);\n if (!plugin) {\n return null;\n }\n return (\n <File {...props} key={file.id}>\n {plugin.render({\n /**\n * TODO @ts-refactor\n */\n // @ts-ignore\n file\n })}\n </File>\n );\n};\ninterface RenderEmptyProps {\n hasPreviouslyUploadedFiles: boolean;\n browseFiles: FilesRenderChildren[\"browseFiles\"];\n fmFilePermission: SecurityPermission | null;\n}\nconst renderEmpty: React.FC<RenderEmptyProps> = ({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n}) => {\n if (!fmFilePermission) {\n return <NoPermissionView />;\n }\n if (hasPreviouslyUploadedFiles) {\n return <NoResults />;\n }\n return <DropFilesHere empty onClick={() => browseFiles()} />;\n};\n\ninterface RefreshOnScrollParams {\n fetchMore: ObservableQueryFields<ListFilesQueryResponse, ListFilesQueryVariables>[\"fetchMore\"];\n scrollFrame: {\n top: number;\n };\n}\n\ninterface FileError {\n file: FileItem;\n e: Error;\n}\n\ninterface GetFileDetailsFileParams {\n src: string;\n list: FileItem[];\n}\n\nconst FileManagerView: React.FC<FileManagerViewProps> = props => {\n const {\n onClose,\n onChange,\n accept,\n multiple = false,\n maxSize,\n multipleMaxCount,\n multipleMaxSize,\n onUploadCompletion\n } = props;\n\n const {\n selected,\n toggleSelected,\n dragging,\n setDragging,\n uploading,\n setUploading,\n showFileDetails,\n showingFileDetails,\n queryParams,\n setQueryParams,\n hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles\n } = useFileManager();\n const { showSnackbar } = useSnackbar();\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission<FileManagerSecurityPermission>(\"fm.file\");\n }, [identity]);\n const canCreate = useMemo(() => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n\n if (fmFilePermission.own) {\n return true;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n }, [fmFilePermission]);\n const canEdit = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n const creatorId = get(item, \"createdBy.id\");\n\n if (fmFilePermission.own && creatorId) {\n const identityId = identity ? identity.id || identity.login : null;\n return creatorId === identityId;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n },\n [fmFilePermission]\n );\n\n const searchOnChange = useCallback(\n // @ts-ignore\n debounce(search => setQueryParams({ search }), 500),\n []\n );\n\n const toggleTag = useCallback(async ({ tag, queryParams }) => {\n const finalTags = Array.isArray(queryParams.tags) ? [...queryParams.tags] : [];\n\n if (finalTags.includes(tag)) {\n finalTags.splice(finalTags.indexOf(tag), 1);\n } else {\n finalTags.push(tag);\n }\n\n setQueryParams({ ...queryParams, tags: finalTags });\n }, []);\n\n const getFileUploadErrorMessage = useCallback(e => {\n if (typeof e === \"string\") {\n const match = e.match(/Message>(.*?)<\\/Message/);\n if (match) {\n const [, message] = match;\n return message;\n }\n\n return e;\n }\n return e.message;\n }, []);\n\n const updateCacheAfterCreateFile: MutationUpdaterFn<CreateFileMutationResponse> = (\n cache,\n newFile\n ) => {\n const newFileData = get(newFile, \"data.fileManager.createFile.data\");\n\n const data = cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n });\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: {\n fileManager: {\n ...(data?.fileManager || {}),\n listFiles: {\n ...(data?.fileManager || {}).listFiles,\n data: [newFileData, ...((data?.fileManager?.listFiles || {}).data || [])]\n }\n }\n }\n });\n };\n\n const getFileDetailsFile = useCallback(({ src, list }: GetFileDetailsFileParams): FileItem => {\n return list.find(item => item.src === src) as FileItem;\n }, []);\n\n useHotkeys({\n zIndex: 50,\n keys: {\n esc: onClose\n }\n });\n\n const searchInput = useRef<HTMLInputElement>(null);\n\n const apolloClient = useApolloClient();\n\n const gqlQuery = useQuery<ListFilesQueryResponse, ListFilesQueryVariables>(LIST_FILES, {\n variables: queryParams,\n onCompleted: response => {\n const list = get(response, \"fileManager.listFiles.data\") || [];\n if (hasPreviouslyUploadedFiles === null) {\n setHasPreviouslyUploadedFiles(list.length > 0);\n }\n }\n });\n\n const refreshOnScroll = useCallback(\n debounce(({ scrollFrame, fetchMore }: RefreshOnScrollParams) => {\n if (scrollFrame.top > 0.9) {\n const cursor = get(gqlQuery.data, \"fileManager.listFiles.meta.cursor\");\n if (cursor) {\n fetchMore({\n variables: { after: cursor },\n updateQuery: (\n prev: ListFilesQueryResponse,\n result: { fetchMoreResult?: ListFilesQueryResponse }\n ) => {\n const { fetchMoreResult } = result;\n if (!fetchMoreResult) {\n return prev;\n }\n\n const next = { ...fetchMoreResult };\n\n next.fileManager.listFiles.data = [\n ...prev.fileManager.listFiles.data,\n ...fetchMoreResult.fileManager.listFiles.data\n ];\n\n return next;\n }\n });\n }\n }\n }, 500),\n [gqlQuery]\n );\n\n const { data, fetchMore, loading } = gqlQuery;\n\n const list: FileItem[] = get(data, \"fileManager.listFiles.data\") || [];\n const [createFile] = useMutation<CreateFileMutationResponse, CreateFileMutationVariables>(\n CREATE_FILE,\n {\n update: updateCacheAfterCreateFile\n }\n );\n const uploadFile = async (files: FileItem[] | FileItem): Promise<number | null> => {\n setUploading(true);\n const list: FileItem[] = Array.isArray(files) ? files : [files];\n\n const errors: FileError[] = [];\n const uploadedFiles: FileItem[] = [];\n await Promise.all(\n list.map(async file => {\n try {\n const response = await getFileUploader()(file, { apolloClient });\n /**\n * Add \"tags\" while creating the new file.\n */\n const createFileResponse = await createFile({\n variables: {\n data: {\n ...response,\n tags: queryParams.scope ? [queryParams.scope] : []\n }\n }\n });\n // Save create file data for later\n uploadedFiles.push(\n get(\n createFileResponse,\n \"data.fileManager.createFile.data\"\n ) as unknown as FileItem\n );\n } catch (e) {\n errors.push({ file, e });\n }\n })\n );\n\n if (!hasPreviouslyUploadedFiles) {\n setHasPreviouslyUploadedFiles(true);\n }\n\n setUploading(false);\n\n if (errors.length > 0) {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n showSnackbar(\n <>\n {t`One or more files were not uploaded successfully:`}\n <ol>\n {errors.map(({ file, e }) => (\n <li key={file.name}>\n <strong>{file.name}</strong>: {getFileUploadErrorMessage(e)}\n </li>\n ))}\n </ol>\n </>\n );\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n\n // We wait 750ms, just for everything to settle down a bit.\n setTimeout(() => showSnackbar(t`File upload complete.`), 750);\n if (typeof onUploadCompletion === \"function\") {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n onUploadCompletion(uploadedFiles);\n onClose && onClose();\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n return null;\n };\n\n const renderUploadFileAction = useCallback(\n ({ browseFiles }) => {\n if (!canCreate) {\n return null;\n }\n return (\n <ButtonPrimary onClick={browseFiles} disabled={uploading}>\n <ButtonIcon icon={<UploadIcon />} />\n {t`Upload...`}\n </ButtonPrimary>\n );\n },\n [uploading, canCreate]\n );\n\n const settingsQuery = useQuery(GET_FILE_SETTINGS);\n const settings = get(settingsQuery.data, \"fileManager.getSettings.data\") || {};\n return (\n <Files\n multiple\n maxSize={settings.uploadMaxFileSize ? settings.uploadMaxFileSize + \"b\" : maxSize}\n multipleMaxSize={multipleMaxSize}\n multipleMaxCount={multipleMaxCount}\n accept={accept}\n onSuccess={files => {\n uploadFile(files.map(file => file.src.file as FileItem).filter(Boolean));\n }}\n onError={errors => {\n console.log(\"onError\", errors);\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n const message = outputFileSelectionError(errors);\n showSnackbar(message);\n }}\n >\n {({ getDropZoneProps, browseFiles, validateFiles }) => (\n <OverlayLayout\n {...getDropZoneProps({\n onDragEnter: () => hasPreviouslyUploadedFiles && setDragging(true),\n onExited: onClose\n })}\n barLeft={\n <InputSearch>\n <Icon className={searchIcon} icon={<SearchIcon />} />\n <input\n ref={searchInput}\n onChange={e => searchOnChange(e.target.value)}\n placeholder={t`Search by filename or tags`}\n disabled={!fmFilePermission}\n data-testid={\"file-manager.search-input\"}\n />\n </InputSearch>\n }\n barRight={\n selected.length > 0 ? (\n <ButtonPrimary\n disabled={uploading}\n onClick={() => {\n (async () => {\n if (typeof onChange === \"function\") {\n await onChange(multiple ? selected : selected[0]);\n\n onClose && onClose();\n }\n })();\n }}\n >\n {t`Select`} {multiple && `(${selected.length})`}\n </ButtonPrimary>\n ) : (\n renderUploadFileAction({ browseFiles })\n )\n }\n >\n <>\n {dragging && hasPreviouslyUploadedFiles && (\n <DropFilesHere\n // @ts-ignore TODO: @adrian - className is never rendered?!\n className={style.draggingFeedback}\n onDragLeave={() => setDragging(false)}\n onDrop={() => setDragging(false)}\n />\n )}\n\n <FileDetails\n validateFiles={validateFiles}\n uploadFile={uploadFile}\n file={getFileDetailsFile({\n list,\n src: showingFileDetails\n })}\n canEdit={canEdit}\n />\n\n <LeftSidebar\n queryParams={queryParams}\n toggleTag={tag => toggleTag({ tag, queryParams })}\n />\n\n <FileListWrapper data-testid={\"fm-list-wrapper\"}>\n {loading && (\n <CircularProgress\n label={t`Loading Files...`}\n style={{ opacity: 1 }}\n />\n )}\n <Scrollbar\n onScrollFrame={scrollFrame =>\n refreshOnScroll({\n scrollFrame,\n fetchMore\n })\n }\n >\n <FileList>\n {list.length\n ? list.map(file =>\n renderFile({\n uploadFile,\n file,\n showFileDetails: () => showFileDetails(file.src),\n selected: selected.find(\n (current: FileItem) =>\n current.src === file.src\n ),\n onSelect: async () => {\n if (typeof onChange === \"function\") {\n if (multiple) {\n toggleSelected(file);\n return;\n }\n\n await onChange(file);\n onClose && onClose();\n }\n }\n })\n )\n : renderEmpty({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n })}\n </FileList>\n </Scrollbar>\n <BottomInfoBar accept={accept} uploading={uploading} />\n </FileListWrapper>\n </>\n </OverlayLayout>\n )}\n </Files>\n );\n};\n\nFileManagerView.defaultProps = {\n multiple: false,\n maxSize: \"1000mb\",\n multipleMaxSize: \"1000mb\",\n multipleMaxCount: 100\n};\n\nexport default FileManagerView;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","style","draggingFeedback","css","position","top","left","width","height","opacity","background","zIndex","leftDrawer","header","textAlign","fontSize","padding","fontWeight","color","InputSearch","styled","backgroundColor","borderRadius","border","marginLeft","outline","searchIcon","FileListWrapper","float","display","FileList","gridTemplateColumns","marginBottom","renderFile","props","file","plugin","getFileTypePlugin","id","render","renderEmpty","hasPreviouslyUploadedFiles","browseFiles","fmFilePermission","FileManagerView","onClose","onChange","accept","multiple","maxSize","multipleMaxCount","multipleMaxSize","onUploadCompletion","useFileManager","selected","toggleSelected","dragging","setDragging","uploading","setUploading","showFileDetails","showingFileDetails","queryParams","setQueryParams","setHasPreviouslyUploadedFiles","useSnackbar","showSnackbar","useSecurity","identity","getPermission","useMemo","canCreate","own","rwd","includes","canEdit","useCallback","item","creatorId","get","identityId","login","searchOnChange","debounce","search","toggleTag","tag","finalTags","Array","isArray","tags","splice","indexOf","push","getFileUploadErrorMessage","e","match","message","updateCacheAfterCreateFile","cache","newFile","newFileData","data","readQuery","query","LIST_FILES","variables","writeQuery","fileManager","listFiles","getFileDetailsFile","src","list","find","useHotkeys","keys","esc","searchInput","useRef","apolloClient","useApolloClient","gqlQuery","useQuery","onCompleted","response","length","refreshOnScroll","scrollFrame","fetchMore","cursor","after","updateQuery","prev","result","fetchMoreResult","next","loading","useMutation","CREATE_FILE","update","createFile","uploadFile","files","errors","uploadedFiles","Promise","all","map","getFileUploader","scope","createFileResponse","setTimeout","name","renderUploadFileAction","settingsQuery","GET_FILE_SETTINGS","settings","uploadMaxFileSize","filter","Boolean","console","log","outputFileSelectionError","getDropZoneProps","validateFiles","onDragEnter","onExited","target","value","current","onSelect","defaultProps"],"sources":["FileManagerView.tsx"],"sourcesContent":["import React, { useRef, useCallback, useMemo } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport Files, { FilesRenderChildren } from \"react-butterfiles\";\nimport { ButtonPrimary, ButtonIcon } from \"@webiny/ui/Button\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport File, { FileProps } from \"./File\";\nimport { useQuery, useMutation, useApolloClient } from \"@apollo/react-hooks\";\nimport { FilesRules } from \"react-butterfiles\";\nimport {\n LIST_FILES,\n CREATE_FILE,\n GET_FILE_SETTINGS,\n CreateFileMutationVariables,\n CreateFileMutationResponse,\n ListFilesQueryResponse,\n ListFilesQueryVariables\n} from \"./graphql\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport getFileUploader from \"./getFileUploader\";\nimport { outputFileSelectionError } from \"./outputFileSelectionError\";\nimport DropFilesHere from \"./DropFilesHere\";\nimport NoResults from \"./NoResults\";\nimport FileDetails from \"./FileDetails\";\nimport LeftSidebar from \"./LeftSidebar\";\nimport BottomInfoBar from \"./BottomInfoBar\";\nimport { OverlayLayout } from \"../OverlayLayout\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\n/**\n * Package react-hotkeyz is missing types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { useFileManager } from \"./FileManagerContext\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\nimport NoPermissionView from \"./NoPermissionView\";\nimport { FileItem, FileManagerSecurityPermission } from \"~/components/FileManager/types\";\nimport { MutationUpdaterFn } from \"apollo-client/core/watchQueryOptions\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\nimport { ObservableQueryFields } from \"@apollo/react-common/lib/types/types\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\nconst style = {\n draggingFeedback: css({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n opacity: 0.5,\n background: \"white\",\n zIndex: 100\n }),\n leftDrawer: {\n header: css({\n textAlign: \"center\",\n fontSize: 18,\n padding: 10,\n fontWeight: 600,\n color: \"var(--mdc-theme-on-surface)\"\n })\n }\n};\n\nconst InputSearch = styled(\"div\")({\n backgroundColor: \"var(--mdc-theme-on-background)\",\n position: \"relative\",\n height: 32,\n padding: 3,\n width: \"100%\",\n borderRadius: 2,\n \"> input\": {\n border: \"none\",\n fontSize: 14,\n width: \"calc(100% - 10px)\",\n height: \"100%\",\n marginLeft: 50,\n backgroundColor: \"transparent\",\n outline: \"none\",\n color: \"var(--mdc-theme-text-primary-on-background)\"\n }\n});\n\nconst searchIcon = css({\n \"&.mdc-button__icon\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n position: \"absolute\",\n width: 24,\n height: 24,\n left: 15,\n top: 7\n }\n});\n\nconst FileListWrapper = styled(\"div\")({\n float: \"right\",\n display: \"inline-block\",\n width: \"calc(100vw - 270px)\",\n height: \"100%\"\n});\n\nconst FileList = styled(\"div\")({\n width: \"100%\",\n display: \"grid\",\n /* define the number of grid columns */\n gridTemplateColumns: \"repeat( auto-fill, minmax(220px, 1fr) )\",\n marginBottom: 95\n});\n\nexport interface FileManagerViewProps {\n onChange?: Function;\n onClose?: Function;\n files?: FilesRules;\n multiple?: boolean; // Does not affect <Files> component, it always allows multiple selection.\n accept: Array<string>;\n maxSize?: number | string;\n multipleMaxCount?: number;\n multipleMaxSize?: number | string;\n onUploadCompletion?: Function;\n tags?: string[];\n scope?: string;\n own?: boolean;\n}\n\ninterface RenderFileProps extends Omit<FileProps, \"children\"> {\n file: FileItem;\n children?: React.ReactNode;\n}\nconst renderFile: React.FC<RenderFileProps> = props => {\n const { file } = props;\n const plugin = getFileTypePlugin(file);\n if (!plugin) {\n return null;\n }\n return (\n <File {...props} key={file.id}>\n {plugin.render({\n /**\n * TODO @ts-refactor\n */\n // @ts-ignore\n file\n })}\n </File>\n );\n};\ninterface RenderEmptyProps {\n hasPreviouslyUploadedFiles: boolean;\n browseFiles: FilesRenderChildren[\"browseFiles\"];\n fmFilePermission: SecurityPermission | null;\n}\nconst renderEmpty: React.FC<RenderEmptyProps> = ({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n}) => {\n if (!fmFilePermission) {\n return <NoPermissionView />;\n }\n if (hasPreviouslyUploadedFiles) {\n return <NoResults />;\n }\n return <DropFilesHere empty onClick={() => browseFiles()} />;\n};\n\ninterface RefreshOnScrollParams {\n fetchMore: ObservableQueryFields<ListFilesQueryResponse, ListFilesQueryVariables>[\"fetchMore\"];\n scrollFrame: {\n top: number;\n };\n}\n\ninterface FileError {\n file: FileItem;\n e: Error;\n}\n\ninterface GetFileDetailsFileParams {\n src: string;\n list: FileItem[];\n}\n\nconst FileManagerView: React.FC<FileManagerViewProps> = props => {\n const {\n onClose,\n onChange,\n accept,\n multiple = false,\n maxSize,\n multipleMaxCount,\n multipleMaxSize,\n onUploadCompletion\n } = props;\n\n const {\n selected,\n toggleSelected,\n dragging,\n setDragging,\n uploading,\n setUploading,\n showFileDetails,\n showingFileDetails,\n queryParams,\n setQueryParams,\n hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles\n } = useFileManager();\n const { showSnackbar } = useSnackbar();\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission<FileManagerSecurityPermission>(\"fm.file\");\n }, [identity]);\n const canCreate = useMemo(() => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n\n if (fmFilePermission.own) {\n return true;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n }, [fmFilePermission]);\n const canEdit = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n const creatorId = get(item, \"createdBy.id\");\n\n if (fmFilePermission.own && creatorId) {\n const identityId = identity ? identity.id || identity.login : null;\n return creatorId === identityId;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n },\n [fmFilePermission]\n );\n\n const searchOnChange = useCallback(\n // @ts-ignore\n debounce(search => setQueryParams({ search }), 500),\n []\n );\n\n const toggleTag = useCallback(async ({ tag, queryParams }) => {\n const finalTags = Array.isArray(queryParams.tags) ? [...queryParams.tags] : [];\n\n if (finalTags.includes(tag)) {\n finalTags.splice(finalTags.indexOf(tag), 1);\n } else {\n finalTags.push(tag);\n }\n\n setQueryParams({ ...queryParams, tags: finalTags });\n }, []);\n\n const getFileUploadErrorMessage = useCallback(e => {\n if (typeof e === \"string\") {\n const match = e.match(/Message>(.*?)<\\/Message/);\n if (match) {\n const [, message] = match;\n return message;\n }\n\n return e;\n }\n return e.message;\n }, []);\n\n const updateCacheAfterCreateFile: MutationUpdaterFn<CreateFileMutationResponse> = (\n cache,\n newFile\n ) => {\n const newFileData = get(newFile, \"data.fileManager.createFile.data\");\n\n const data = cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n });\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: {\n fileManager: {\n ...(data?.fileManager || {}),\n listFiles: {\n ...(data?.fileManager || {}).listFiles,\n data: [newFileData, ...((data?.fileManager?.listFiles || {}).data || [])]\n }\n }\n }\n });\n };\n\n const getFileDetailsFile = useCallback(({ src, list }: GetFileDetailsFileParams): FileItem => {\n return list.find(item => item.src === src) as FileItem;\n }, []);\n\n useHotkeys({\n zIndex: 50,\n keys: {\n esc: onClose\n }\n });\n\n const searchInput = useRef<HTMLInputElement>(null);\n\n const apolloClient = useApolloClient();\n\n const gqlQuery = useQuery<ListFilesQueryResponse, ListFilesQueryVariables>(LIST_FILES, {\n variables: queryParams,\n onCompleted: response => {\n const list = get(response, \"fileManager.listFiles.data\") || [];\n if (hasPreviouslyUploadedFiles === null) {\n setHasPreviouslyUploadedFiles(list.length > 0);\n }\n }\n });\n\n const refreshOnScroll = useCallback(\n debounce(({ scrollFrame, fetchMore }: RefreshOnScrollParams) => {\n if (scrollFrame.top > 0.9) {\n const cursor = get(gqlQuery.data, \"fileManager.listFiles.meta.cursor\");\n if (cursor) {\n fetchMore({\n variables: { after: cursor },\n updateQuery: (\n prev: ListFilesQueryResponse,\n result: { fetchMoreResult?: ListFilesQueryResponse }\n ) => {\n const { fetchMoreResult } = result;\n if (!fetchMoreResult) {\n return prev;\n }\n\n const next = { ...fetchMoreResult };\n\n next.fileManager.listFiles.data = [\n ...prev.fileManager.listFiles.data,\n ...fetchMoreResult.fileManager.listFiles.data\n ];\n\n return next;\n }\n });\n }\n }\n }, 500),\n [gqlQuery]\n );\n\n const { data, fetchMore, loading } = gqlQuery;\n\n const list: FileItem[] = get(data, \"fileManager.listFiles.data\") || [];\n const [createFile] = useMutation<CreateFileMutationResponse, CreateFileMutationVariables>(\n CREATE_FILE,\n {\n update: updateCacheAfterCreateFile\n }\n );\n const uploadFile = async (files: FileItem[] | FileItem): Promise<number | null> => {\n setUploading(true);\n const list: FileItem[] = Array.isArray(files) ? files : [files];\n\n const errors: FileError[] = [];\n const uploadedFiles: FileItem[] = [];\n await Promise.all(\n list.map(async file => {\n try {\n const response = await getFileUploader()(file, { apolloClient });\n /**\n * Add \"tags\" while creating the new file.\n */\n const createFileResponse = await createFile({\n variables: {\n data: {\n ...response,\n tags: queryParams.scope ? [queryParams.scope] : []\n }\n }\n });\n // Save create file data for later\n uploadedFiles.push(\n get(\n createFileResponse,\n \"data.fileManager.createFile.data\"\n ) as unknown as FileItem\n );\n } catch (e) {\n errors.push({ file, e });\n }\n })\n );\n\n if (!hasPreviouslyUploadedFiles) {\n setHasPreviouslyUploadedFiles(true);\n }\n\n setUploading(false);\n\n if (errors.length > 0) {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n showSnackbar(\n <>\n {t`One or more files were not uploaded successfully:`}\n <ol>\n {errors.map(({ file, e }) => (\n <li key={file.name}>\n <strong>{file.name}</strong>: {getFileUploadErrorMessage(e)}\n </li>\n ))}\n </ol>\n </>\n );\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n\n // We wait 750ms, just for everything to settle down a bit.\n setTimeout(() => showSnackbar(t`File upload complete.`), 750);\n if (typeof onUploadCompletion === \"function\") {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n onUploadCompletion(uploadedFiles);\n onClose && onClose();\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n return null;\n };\n\n const renderUploadFileAction = useCallback(\n ({ browseFiles }) => {\n if (!canCreate) {\n return null;\n }\n return (\n <ButtonPrimary onClick={browseFiles} disabled={uploading}>\n <ButtonIcon icon={<UploadIcon />} />\n {t`Upload...`}\n </ButtonPrimary>\n );\n },\n [uploading, canCreate]\n );\n\n const settingsQuery = useQuery(GET_FILE_SETTINGS);\n const settings = get(settingsQuery.data, \"fileManager.getSettings.data\") || {};\n return (\n <Files\n multiple\n maxSize={settings.uploadMaxFileSize ? settings.uploadMaxFileSize + \"b\" : maxSize}\n multipleMaxSize={multipleMaxSize}\n multipleMaxCount={multipleMaxCount}\n accept={accept}\n onSuccess={files => {\n uploadFile(files.map(file => file.src.file as FileItem).filter(Boolean));\n }}\n onError={errors => {\n console.log(\"onError\", errors);\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n const message = outputFileSelectionError(errors);\n showSnackbar(message);\n }}\n >\n {({ getDropZoneProps, browseFiles, validateFiles }) => (\n <OverlayLayout\n {...getDropZoneProps({\n onDragEnter: () => hasPreviouslyUploadedFiles && setDragging(true),\n onExited: onClose\n })}\n barLeft={\n <InputSearch>\n <Icon className={searchIcon} icon={<SearchIcon />} />\n <input\n ref={searchInput}\n onChange={e => searchOnChange(e.target.value)}\n placeholder={t`Search by filename or tags`}\n disabled={!fmFilePermission}\n data-testid={\"file-manager.search-input\"}\n />\n </InputSearch>\n }\n barRight={\n selected.length > 0 ? (\n <ButtonPrimary\n disabled={uploading}\n onClick={() => {\n (async () => {\n if (typeof onChange === \"function\") {\n await onChange(multiple ? selected : selected[0]);\n\n onClose && onClose();\n }\n })();\n }}\n >\n {t`Select`} {multiple && `(${selected.length})`}\n </ButtonPrimary>\n ) : (\n renderUploadFileAction({ browseFiles })\n )\n }\n >\n <>\n {dragging && hasPreviouslyUploadedFiles && (\n <DropFilesHere\n // @ts-ignore TODO: @adrian - className is never rendered?!\n className={style.draggingFeedback}\n onDragLeave={() => setDragging(false)}\n onDrop={() => setDragging(false)}\n />\n )}\n\n <FileDetails\n validateFiles={validateFiles}\n uploadFile={uploadFile}\n file={getFileDetailsFile({\n list,\n src: showingFileDetails\n })}\n canEdit={canEdit}\n />\n\n <LeftSidebar\n queryParams={queryParams}\n toggleTag={tag => toggleTag({ tag, queryParams })}\n />\n\n <FileListWrapper data-testid={\"fm-list-wrapper\"}>\n {loading && (\n <CircularProgress\n label={t`Loading Files...`}\n style={{ opacity: 1 }}\n />\n )}\n <Scrollbar\n onScrollFrame={scrollFrame =>\n refreshOnScroll({\n scrollFrame,\n fetchMore\n })\n }\n >\n <FileList>\n {list.length\n ? list.map(file =>\n renderFile({\n uploadFile,\n file,\n showFileDetails: () => showFileDetails(file.src),\n selected: selected.find(\n (current: FileItem) =>\n current.src === file.src\n ),\n onSelect: async () => {\n if (typeof onChange === \"function\") {\n if (multiple) {\n toggleSelected(file);\n return;\n }\n\n await onChange(file);\n onClose && onClose();\n }\n }\n })\n )\n : renderEmpty({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n })}\n </FileList>\n </Scrollbar>\n <BottomInfoBar accept={accept} uploading={uploading} />\n </FileListWrapper>\n </>\n </OverlayLayout>\n )}\n </Files>\n );\n};\n\nFileManagerView.defaultProps = {\n multiple: false,\n maxSize: \"1000mb\",\n multipleMaxSize: \"1000mb\",\n multipleMaxCount: 100\n};\n\nexport default FileManagerView;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AASA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;;;AAMA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,0CAAR,CAAV;;AAEA,IAAMC,KAAK,GAAG;EACVC,gBAAgB,eAAE,IAAAC,YAAA,EAAI;IAClBC,QAAQ,EAAE,OADQ;IAElBC,GAAG,EAAE,CAFa;IAGlBC,IAAI,EAAE,CAHY;IAIlBC,KAAK,EAAE,MAJW;IAKlBC,MAAM,EAAE,MALU;IAMlBC,OAAO,EAAE,GANS;IAOlBC,UAAU,EAAE,OAPM;IAQlBC,MAAM,EAAE;EARU,CAAJ,4BADR;EAWVC,UAAU,EAAE;IACRC,MAAM,eAAE,IAAAV,YAAA,EAAI;MACRW,SAAS,EAAE,QADH;MAERC,QAAQ,EAAE,EAFF;MAGRC,OAAO,EAAE,EAHD;MAIRC,UAAU,EAAE,GAJJ;MAKRC,KAAK,EAAE;IALC,CAAJ;EADA;AAXF,CAAd;AAsBA,IAAMC,WAAW,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC9BC,eAAe,EAAE,gCADa;EAE9BjB,QAAQ,EAAE,UAFoB;EAG9BI,MAAM,EAAE,EAHsB;EAI9BQ,OAAO,EAAE,CAJqB;EAK9BT,KAAK,EAAE,MALuB;EAM9Be,YAAY,EAAE,CANgB;EAO9B,WAAW;IACPC,MAAM,EAAE,MADD;IAEPR,QAAQ,EAAE,EAFH;IAGPR,KAAK,EAAE,mBAHA;IAIPC,MAAM,EAAE,MAJD;IAKPgB,UAAU,EAAE,EALL;IAMPH,eAAe,EAAE,aANV;IAOPI,OAAO,EAAE,MAPF;IAQPP,KAAK,EAAE;EARA;AAPmB,CAAjB,CAAjB;AAmBA,IAAMQ,UAAU,gBAAG,IAAAvB,YAAA,EAAI;EACnB,sBAAsB;IAClBe,KAAK,EAAE,+CADW;IAElBd,QAAQ,EAAE,UAFQ;IAGlBG,KAAK,EAAE,EAHW;IAIlBC,MAAM,EAAE,EAJU;IAKlBF,IAAI,EAAE,EALY;IAMlBD,GAAG,EAAE;EANa;AADH,CAAJ,sBAAnB;AAWA,IAAMsB,eAAe,oBAAGP,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAClCQ,KAAK,EAAE,OAD2B;EAElCC,OAAO,EAAE,cAFyB;EAGlCtB,KAAK,EAAE,qBAH2B;EAIlCC,MAAM,EAAE;AAJ0B,CAAjB,CAArB;AAOA,IAAMsB,QAAQ,oBAAGV,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC3Bb,KAAK,EAAE,MADoB;EAE3BsB,OAAO,EAAE,MAFkB;;EAG3B;EACAE,mBAAmB,EAAE,yCAJM;EAK3BC,YAAY,EAAE;AALa,CAAjB,CAAd;;AA2BA,IAAMC,UAAqC,GAAG,SAAxCA,UAAwC,CAAAC,KAAK,EAAI;EACnD,IAAQC,IAAR,GAAiBD,KAAjB,CAAQC,IAAR;EACA,IAAMC,MAAM,GAAG,IAAAC,0BAAA,EAAkBF,IAAlB,CAAf;;EACA,IAAI,CAACC,MAAL,EAAa;IACT,OAAO,IAAP;EACH;;EACD,oBACI,6BAAC,aAAD,oBAAUF,KAAV;IAAiB,GAAG,EAAEC,IAAI,CAACG;EAA3B,IACKF,MAAM,CAACG,MAAP,CAAc;IACX;AAChB;AACA;IACgB;IACAJ,IAAI,EAAJA;EALW,CAAd,CADL,CADJ;AAWH,CAjBD;;AAuBA,IAAMK,WAAuC,GAAG,SAA1CA,WAA0C,OAI1C;EAAA,IAHFC,0BAGE,QAHFA,0BAGE;EAAA,IAFFC,WAEE,QAFFA,WAEE;EAAA,IADFC,gBACE,QADFA,gBACE;;EACF,IAAI,CAACA,gBAAL,EAAuB;IACnB,oBAAO,6BAAC,yBAAD,OAAP;EACH;;EACD,IAAIF,0BAAJ,EAAgC;IAC5B,oBAAO,6BAAC,kBAAD,OAAP;EACH;;EACD,oBAAO,6BAAC,sBAAD;IAAe,KAAK,MAApB;IAAqB,OAAO,EAAE;MAAA,OAAMC,WAAW,EAAjB;IAAA;EAA9B,EAAP;AACH,CAZD;;AA+BA,IAAME,eAA+C,GAAG,SAAlDA,eAAkD,CAAAV,KAAK,EAAI;EAC7D,IACIW,OADJ,GASIX,KATJ,CACIW,OADJ;EAAA,IAEIC,QAFJ,GASIZ,KATJ,CAEIY,QAFJ;EAAA,IAGIC,MAHJ,GASIb,KATJ,CAGIa,MAHJ;EAAA,sBASIb,KATJ,CAIIc,QAJJ;EAAA,IAIIA,QAJJ,gCAIe,KAJf;EAAA,IAKIC,OALJ,GASIf,KATJ,CAKIe,OALJ;EAAA,IAMIC,gBANJ,GASIhB,KATJ,CAMIgB,gBANJ;EAAA,IAOIC,eAPJ,GASIjB,KATJ,CAOIiB,eAPJ;EAAA,IAQIC,kBARJ,GASIlB,KATJ,CAQIkB,kBARJ;;EAWA,sBAaI,IAAAC,kCAAA,GAbJ;EAAA,IACIC,QADJ,mBACIA,QADJ;EAAA,IAEIC,cAFJ,mBAEIA,cAFJ;EAAA,IAGIC,QAHJ,mBAGIA,QAHJ;EAAA,IAIIC,WAJJ,mBAIIA,WAJJ;EAAA,IAKIC,SALJ,mBAKIA,SALJ;EAAA,IAMIC,YANJ,mBAMIA,YANJ;EAAA,IAOIC,gBAPJ,mBAOIA,eAPJ;EAAA,IAQIC,kBARJ,mBAQIA,kBARJ;EAAA,IASIC,WATJ,mBASIA,WATJ;EAAA,IAUIC,cAVJ,mBAUIA,cAVJ;EAAA,IAWItB,0BAXJ,mBAWIA,0BAXJ;EAAA,IAYIuB,6BAZJ,mBAYIA,6BAZJ;;EAcA,mBAAyB,IAAAC,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR;;EAEA,mBAAoC,IAAAC,wBAAA,GAApC;EAAA,IAAQC,QAAR,gBAAQA,QAAR;EAAA,IAAkBC,aAAlB,gBAAkBA,aAAlB;;EACA,IAAM1B,gBAAgB,GAAG,IAAA2B,cAAA,EAAQ,YAA4C;IACzE,OAAOD,aAAa,CAAgC,SAAhC,CAApB;EACH,CAFwB,EAEtB,CAACD,QAAD,CAFsB,CAAzB;EAGA,IAAMG,SAAS,GAAG,IAAAD,cAAA,EAAQ,YAAM;IAC5B;IACA,IAAI,CAAC3B,gBAAL,EAAuB;MACnB,OAAO,KAAP;IACH;;IAED,IAAIA,gBAAgB,CAAC6B,GAArB,EAA0B;MACtB,OAAO,IAAP;IACH;;IAED,IAAI,OAAO7B,gBAAgB,CAAC8B,GAAxB,KAAgC,QAApC,EAA8C;MAC1C,OAAO9B,gBAAgB,CAAC8B,GAAjB,CAAqBC,QAArB,CAA8B,GAA9B,CAAP;IACH;;IAED,OAAO,IAAP;EACH,CAfiB,EAef,CAAC/B,gBAAD,CAfe,CAAlB;EAgBA,IAAMgC,OAAO,GAAG,IAAAC,kBAAA,EACZ,UAAAC,IAAI,EAAI;IACJ;IACA,IAAI,CAAClC,gBAAL,EAAuB;MACnB,OAAO,KAAP;IACH;;IACD,IAAMmC,SAAS,GAAG,IAAAC,YAAA,EAAIF,IAAJ,EAAU,cAAV,CAAlB;;IAEA,IAAIlC,gBAAgB,CAAC6B,GAAjB,IAAwBM,SAA5B,EAAuC;MACnC,IAAME,UAAU,GAAGZ,QAAQ,GAAGA,QAAQ,CAAC9B,EAAT,IAAe8B,QAAQ,CAACa,KAA3B,GAAmC,IAA9D;MACA,OAAOH,SAAS,KAAKE,UAArB;IACH;;IAED,IAAI,OAAOrC,gBAAgB,CAAC8B,GAAxB,KAAgC,QAApC,EAA8C;MAC1C,OAAO9B,gBAAgB,CAAC8B,GAAjB,CAAqBC,QAArB,CAA8B,GAA9B,CAAP;IACH;;IAED,OAAO,IAAP;EACH,CAlBW,EAmBZ,CAAC/B,gBAAD,CAnBY,CAAhB;EAsBA,IAAMuC,cAAc,GAAG,IAAAN,kBAAA,GACnB;EACA,IAAAO,iBAAA,EAAS,UAAAC,MAAM;IAAA,OAAIrB,cAAc,CAAC;MAAEqB,MAAM,EAANA;IAAF,CAAD,CAAlB;EAAA,CAAf,EAA+C,GAA/C,CAFmB,EAGnB,EAHmB,CAAvB;;EAMA,IAAMC,UAAS,GAAG,IAAAT,kBAAA;IAAA,mGAAY;MAAA;MAAA;QAAA;UAAA;YAAA;cAASU,GAAT,SAASA,GAAT,EAAcxB,WAAd,SAAcA,WAAd;cACpByB,SADoB,GACRC,KAAK,CAACC,OAAN,CAAc3B,WAAW,CAAC4B,IAA1B,qCAAsC5B,WAAW,CAAC4B,IAAlD,IAA0D,EADlD;;cAG1B,IAAIH,SAAS,CAACb,QAAV,CAAmBY,GAAnB,CAAJ,EAA6B;gBACzBC,SAAS,CAACI,MAAV,CAAiBJ,SAAS,CAACK,OAAV,CAAkBN,GAAlB,CAAjB,EAAyC,CAAzC;cACH,CAFD,MAEO;gBACHC,SAAS,CAACM,IAAV,CAAeP,GAAf;cACH;;cAEDvB,cAAc,6DAAMD,WAAN;gBAAmB4B,IAAI,EAAEH;cAAzB,GAAd;;YAT0B;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAZ;;IAAA;MAAA;IAAA;EAAA,KAUf,EAVe,CAAlB;;EAYA,IAAMO,yBAAyB,GAAG,IAAAlB,kBAAA,EAAY,UAAAmB,CAAC,EAAI;IAC/C,IAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;MACvB,IAAMC,KAAK,GAAGD,CAAC,CAACC,KAAF,CAAQ,yBAAR,CAAd;;MACA,IAAIA,KAAJ,EAAW;QACP,0CAAoBA,KAApB;QAAA,IAASC,OAAT;;QACA,OAAOA,OAAP;MACH;;MAED,OAAOF,CAAP;IACH;;IACD,OAAOA,CAAC,CAACE,OAAT;EACH,CAXiC,EAW/B,EAX+B,CAAlC;;EAaA,IAAMC,0BAAyE,GAAG,SAA5EA,0BAA4E,CAC9EC,KAD8E,EAE9EC,OAF8E,EAG7E;IAAA;;IACD,IAAMC,WAAW,GAAG,IAAAtB,YAAA,EAAIqB,OAAJ,EAAa,kCAAb,CAApB;IAEA,IAAME,IAAI,GAAGH,KAAK,CAACI,SAAN,CAAwC;MACjDC,KAAK,EAAEC,mBAD0C;MAEjDC,SAAS,EAAE5C;IAFsC,CAAxC,CAAb;IAKAqC,KAAK,CAACQ,UAAN,CAAiB;MACbH,KAAK,EAAEC,mBADM;MAEbC,SAAS,EAAE5C,WAFE;MAGbwC,IAAI,EAAE;QACFM,WAAW,8DACH,CAAAN,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEM,WAAN,KAAqB,EADlB;UAEPC,SAAS,8DACF,CAAC,CAAAP,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEM,WAAN,KAAqB,EAAtB,EAA0BC,SADxB;YAELP,IAAI,GAAGD,WAAH,0CAAoB,CAAC,CAAAC,IAAI,SAAJ,IAAAA,IAAI,WAAJ,iCAAAA,IAAI,CAAEM,WAAN,wEAAmBC,SAAnB,KAAgC,EAAjC,EAAqCP,IAArC,IAA6C,EAAjE;UAFC;QAFF;MADT;IAHO,CAAjB;EAaH,CAxBD;;EA0BA,IAAMQ,kBAAkB,GAAG,IAAAlC,kBAAA,EAAY,iBAAuD;IAAA,IAApDmC,GAAoD,SAApDA,GAAoD;IAAA,IAA/CC,IAA+C,SAA/CA,IAA+C;IAC1F,OAAOA,IAAI,CAACC,IAAL,CAAU,UAAApC,IAAI;MAAA,OAAIA,IAAI,CAACkC,GAAL,KAAaA,GAAjB;IAAA,CAAd,CAAP;EACH,CAF0B,EAExB,EAFwB,CAA3B;EAIA,IAAAG,wBAAA,EAAW;IACPvG,MAAM,EAAE,EADD;IAEPwG,IAAI,EAAE;MACFC,GAAG,EAAEvE;IADH;EAFC,CAAX;EAOA,IAAMwE,WAAW,GAAG,IAAAC,aAAA,EAAyB,IAAzB,CAApB;EAEA,IAAMC,YAAY,GAAG,IAAAC,2BAAA,GAArB;EAEA,IAAMC,QAAQ,GAAG,IAAAC,oBAAA,EAA0DjB,mBAA1D,EAAsE;IACnFC,SAAS,EAAE5C,WADwE;IAEnF6D,WAAW,EAAE,qBAAAC,QAAQ,EAAI;MACrB,IAAMZ,IAAI,GAAG,IAAAjC,YAAA,EAAI6C,QAAJ,EAAc,4BAAd,KAA+C,EAA5D;;MACA,IAAInF,0BAA0B,KAAK,IAAnC,EAAyC;QACrCuB,6BAA6B,CAACgD,IAAI,CAACa,MAAL,GAAc,CAAf,CAA7B;MACH;IACJ;EAPkF,CAAtE,CAAjB;EAUA,IAAMC,eAAe,GAAG,IAAAlD,kBAAA,EACpB,IAAAO,iBAAA,EAAS,iBAAuD;IAAA,IAApD4C,WAAoD,SAApDA,WAAoD;IAAA,IAAvCC,SAAuC,SAAvCA,SAAuC;;IAC5D,IAAID,WAAW,CAAC1H,GAAZ,GAAkB,GAAtB,EAA2B;MACvB,IAAM4H,MAAM,GAAG,IAAAlD,YAAA,EAAI0C,QAAQ,CAACnB,IAAb,EAAmB,mCAAnB,CAAf;;MACA,IAAI2B,MAAJ,EAAY;QACRD,SAAS,CAAC;UACNtB,SAAS,EAAE;YAAEwB,KAAK,EAAED;UAAT,CADL;UAENE,WAAW,EAAE,qBACTC,IADS,EAETC,MAFS,EAGR;YACD,IAAQC,eAAR,GAA4BD,MAA5B,CAAQC,eAAR;;YACA,IAAI,CAACA,eAAL,EAAsB;cAClB,OAAOF,IAAP;YACH;;YAED,IAAMG,IAAI,mCAAQD,eAAR,CAAV;YAEAC,IAAI,CAAC3B,WAAL,CAAiBC,SAAjB,CAA2BP,IAA3B,8CACO8B,IAAI,CAACxB,WAAL,CAAiBC,SAAjB,CAA2BP,IADlC,oCAEOgC,eAAe,CAAC1B,WAAhB,CAA4BC,SAA5B,CAAsCP,IAF7C;YAKA,OAAOiC,IAAP;UACH;QAnBK,CAAD,CAAT;MAqBH;IACJ;EACJ,CA3BD,EA2BG,GA3BH,CADoB,EA6BpB,CAACd,QAAD,CA7BoB,CAAxB;EAgCA,IAAQnB,IAAR,GAAqCmB,QAArC,CAAQnB,IAAR;EAAA,IAAc0B,SAAd,GAAqCP,QAArC,CAAcO,SAAd;EAAA,IAAyBQ,OAAzB,GAAqCf,QAArC,CAAyBe,OAAzB;EAEA,IAAMxB,IAAgB,GAAG,IAAAjC,YAAA,EAAIuB,IAAJ,EAAU,4BAAV,KAA2C,EAApE;;EACA,mBAAqB,IAAAmC,uBAAA,EACjBC,oBADiB,EAEjB;IACIC,MAAM,EAAEzC;EADZ,CAFiB,CAArB;EAAA;EAAA,IAAO0C,UAAP;;EAMA,IAAMC,UAAU;IAAA,mGAAG,kBAAOC,KAAP;MAAA;MAAA;QAAA;UAAA;YAAA;cACfnF,YAAY,CAAC,IAAD,CAAZ;cACMqD,IAFS,GAEUxB,KAAK,CAACC,OAAN,CAAcqD,KAAd,IAAuBA,KAAvB,GAA+B,CAACA,KAAD,CAFzC;cAITC,MAJS,GAIa,EAJb;cAKTC,aALS,GAKmB,EALnB;cAAA;cAAA,OAMTC,OAAO,CAACC,GAAR,CACFlC,IAAI,CAACmC,GAAL;gBAAA,mGAAS,kBAAMhH,IAAN;kBAAA;kBAAA;oBAAA;sBAAA;wBAAA;0BAAA;0BAAA;0BAAA,OAEsB,IAAAiH,wBAAA,IAAkBjH,IAAlB,EAAwB;4BAAEoF,YAAY,EAAZA;0BAAF,CAAxB,CAFtB;;wBAAA;0BAEKK,QAFL;0BAAA;0BAAA,OAMgCgB,UAAU,CAAC;4BACxClC,SAAS,EAAE;8BACPJ,IAAI,8DACGsB,QADH;gCAEAlC,IAAI,EAAE5B,WAAW,CAACuF,KAAZ,GAAoB,CAACvF,WAAW,CAACuF,KAAb,CAApB,GAA0C;8BAFhD;4BADG;0BAD6B,CAAD,CAN1C;;wBAAA;0BAMKC,kBANL;0BAcD;0BACAN,aAAa,CAACnD,IAAd,CACI,IAAAd,YAAA,EACIuE,kBADJ,EAEI,kCAFJ,CADJ;0BAfC;0BAAA;;wBAAA;0BAAA;0BAAA;0BAsBDP,MAAM,CAAClD,IAAP,CAAY;4BAAE1D,IAAI,EAAJA,IAAF;4BAAQ4D,CAAC;0BAAT,CAAZ;;wBAtBC;wBAAA;0BAAA;sBAAA;oBAAA;kBAAA;gBAAA,CAAT;;gBAAA;kBAAA;gBAAA;cAAA,IADE,CANS;;YAAA;cAkCf,IAAI,CAACtD,0BAAL,EAAiC;gBAC7BuB,6BAA6B,CAAC,IAAD,CAA7B;cACH;;cAEDL,YAAY,CAAC,KAAD,CAAZ;;cAtCe,MAwCXoF,MAAM,CAAClB,MAAP,GAAgB,CAxCL;gBAAA;gBAAA;cAAA;;cAAA,kCA0CJ0B,UAAU,CAAC,YAAM;gBACpBrF,YAAY,eACR,4DACKpE,CADL,mJAEI,yCACKiJ,MAAM,CAACI,GAAP,CAAW;kBAAA,IAAGhH,IAAH,SAAGA,IAAH;kBAAA,IAAS4D,CAAT,SAASA,CAAT;kBAAA,oBACR;oBAAI,GAAG,EAAE5D,IAAI,CAACqH;kBAAd,gBACI,6CAASrH,IAAI,CAACqH,IAAd,CADJ,EACgC,IADhC,EACmC1D,yBAAyB,CAACC,CAAD,CAD5D,CADQ;gBAAA,CAAX,CADL,CAFJ,CADQ,CAAZ,CADoB,CAapB;cACH,CAdgB,EAcd,GAdc,CA1CN;;YAAA;cA2Df;cACAwD,UAAU,CAAC;gBAAA,OAAMrF,YAAY,CAACpE,CAAD,2GAAlB;cAAA,CAAD,EAA+C,GAA/C,CAAV;;cA5De,MA6DX,OAAOsD,kBAAP,KAA8B,UA7DnB;gBAAA;gBAAA;cAAA;;cAAA,kCA+DJmG,UAAU,CAAC,YAAM;gBACpBnG,kBAAkB,CAAC4F,aAAD,CAAlB;gBACAnG,OAAO,IAAIA,OAAO,EAAlB,CAFoB,CAGpB;cACH,CAJgB,EAId,GAJc,CA/DN;;YAAA;cAAA,kCAqER,IArEQ;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAH;;IAAA,gBAAVgG,UAAU;MAAA;IAAA;EAAA,GAAhB;;EAwEA,IAAMY,sBAAsB,GAAG,IAAA7E,kBAAA,EAC3B,iBAAqB;IAAA,IAAlBlC,WAAkB,SAAlBA,WAAkB;;IACjB,IAAI,CAAC6B,SAAL,EAAgB;MACZ,OAAO,IAAP;IACH;;IACD,oBACI,6BAAC,qBAAD;MAAe,OAAO,EAAE7B,WAAxB;MAAqC,QAAQ,EAAEgB;IAA/C,gBACI,6BAAC,kBAAD;MAAY,IAAI,eAAE,6BAAC,qCAAD;IAAlB,EADJ,EAEK5D,CAFL,+FADJ;EAMH,CAX0B,EAY3B,CAAC4D,SAAD,EAAYa,SAAZ,CAZ2B,CAA/B;EAeA,IAAMmF,aAAa,GAAG,IAAAhC,oBAAA,EAASiC,0BAAT,CAAtB;EACA,IAAMC,QAAQ,GAAG,IAAA7E,YAAA,EAAI2E,aAAa,CAACpD,IAAlB,EAAwB,8BAAxB,KAA2D,EAA5E;EACA,oBACI,6BAAC,yBAAD;IACI,QAAQ,MADZ;IAEI,OAAO,EAAEsD,QAAQ,CAACC,iBAAT,GAA6BD,QAAQ,CAACC,iBAAT,GAA6B,GAA1D,GAAgE5G,OAF7E;IAGI,eAAe,EAAEE,eAHrB;IAII,gBAAgB,EAAED,gBAJtB;IAKI,MAAM,EAAEH,MALZ;IAMI,SAAS,EAAE,mBAAA+F,KAAK,EAAI;MAChBD,UAAU,CAACC,KAAK,CAACK,GAAN,CAAU,UAAAhH,IAAI;QAAA,OAAIA,IAAI,CAAC4E,GAAL,CAAS5E,IAAb;MAAA,CAAd,EAA6C2H,MAA7C,CAAoDC,OAApD,CAAD,CAAV;IACH,CARL;IASI,OAAO,EAAE,iBAAAhB,MAAM,EAAI;MACfiB,OAAO,CAACC,GAAR,CAAY,SAAZ,EAAuBlB,MAAvB;MACA;AAChB;AACA;AACA;MACgB;;MACA,IAAM9C,OAAO,GAAG,IAAAiE,kDAAA,EAAyBnB,MAAzB,CAAhB;MACA7E,YAAY,CAAC+B,OAAD,CAAZ;IACH;EAlBL,GAoBK;IAAA,IAAGkE,gBAAH,UAAGA,gBAAH;IAAA,IAAqBzH,WAArB,UAAqBA,WAArB;IAAA,IAAkC0H,aAAlC,UAAkCA,aAAlC;IAAA,oBACG,6BAAC,4BAAD,oBACQD,gBAAgB,CAAC;MACjBE,WAAW,EAAE;QAAA,OAAM5H,0BAA0B,IAAIgB,WAAW,CAAC,IAAD,CAA/C;MAAA,CADI;MAEjB6G,QAAQ,EAAEzH;IAFO,CAAD,CADxB;MAKI,OAAO,eACH,6BAAC,WAAD,qBACI,6BAAC,UAAD;QAAM,SAAS,EAAEnB,UAAjB;QAA6B,IAAI,eAAE,6BAAC,+BAAD;MAAnC,EADJ,eAEI;QACI,GAAG,EAAE2F,WADT;QAEI,QAAQ,EAAE,kBAAAtB,CAAC;UAAA,OAAIb,cAAc,CAACa,CAAC,CAACwE,MAAF,CAASC,KAAV,CAAlB;QAAA,CAFf;QAGI,WAAW,EAAE1K,CAAF,+GAHf;QAII,QAAQ,EAAE,CAAC6C,gBAJf;QAKI,eAAa;MALjB,EAFJ,CANR;MAiBI,QAAQ,EACJW,QAAQ,CAACuE,MAAT,GAAkB,CAAlB,gBACI,6BAAC,qBAAD;QACI,QAAQ,EAAEnE,SADd;QAEI,OAAO,EAAE,mBAAM;UACX,uFAAC;YAAA;cAAA;gBAAA;kBAAA;oBAAA,MACO,OAAOZ,QAAP,KAAoB,UAD3B;sBAAA;sBAAA;oBAAA;;oBAAA;oBAAA,OAEaA,QAAQ,CAACE,QAAQ,GAAGM,QAAH,GAAcA,QAAQ,CAAC,CAAD,CAA/B,CAFrB;;kBAAA;oBAIOT,OAAO,IAAIA,OAAO,EAAlB;;kBAJP;kBAAA;oBAAA;gBAAA;cAAA;YAAA;UAAA,CAAD;QAOH;MAVL,GAYK/C,CAZL,6FAYe,GAZf,EAYiBkD,QAAQ,eAAQM,QAAQ,CAACuE,MAAjB,MAZzB,CADJ,GAgBI4B,sBAAsB,CAAC;QAAE/G,WAAW,EAAXA;MAAF,CAAD;IAlClC,iBAsCI,4DACKc,QAAQ,IAAIf,0BAAZ,iBACG,6BAAC,sBAAD,CACI;IADJ;MAEI,SAAS,EAAExC,KAAK,CAACC,gBAFrB;MAGI,WAAW,EAAE;QAAA,OAAMuD,WAAW,CAAC,KAAD,CAAjB;MAAA,CAHjB;MAII,MAAM,EAAE;QAAA,OAAMA,WAAW,CAAC,KAAD,CAAjB;MAAA;IAJZ,EAFR,eAUI,6BAAC,oBAAD;MACI,aAAa,EAAE2G,aADnB;MAEI,UAAU,EAAEvB,UAFhB;MAGI,IAAI,EAAE/B,kBAAkB,CAAC;QACrBE,IAAI,EAAJA,IADqB;QAErBD,GAAG,EAAElD;MAFgB,CAAD,CAH5B;MAOI,OAAO,EAAEc;IAPb,EAVJ,eAoBI,6BAAC,oBAAD;MACI,WAAW,EAAEb,WADjB;MAEI,SAAS,EAAE,mBAAAwB,GAAG;QAAA,OAAID,UAAS,CAAC;UAAEC,GAAG,EAAHA,GAAF;UAAOxB,WAAW,EAAXA;QAAP,CAAD,CAAb;MAAA;IAFlB,EApBJ,eAyBI,6BAAC,eAAD;MAAiB,eAAa;IAA9B,GACK0E,OAAO,iBACJ,6BAAC,0BAAD;MACI,KAAK,EAAE1I,CAAF,qGADT;MAEI,KAAK,EAAE;QAAEW,OAAO,EAAE;MAAX;IAFX,EAFR,eAOI,6BAAC,oBAAD;MACI,aAAa,EAAE,uBAAAsH,WAAW;QAAA,OACtBD,eAAe,CAAC;UACZC,WAAW,EAAXA,WADY;UAEZC,SAAS,EAATA;QAFY,CAAD,CADO;MAAA;IAD9B,gBAQI,6BAAC,QAAD,QACKhB,IAAI,CAACa,MAAL,GACKb,IAAI,CAACmC,GAAL,CAAS,UAAAhH,IAAI;MAAA,OACTF,UAAU,CAAC;QACP4G,UAAU,EAAVA,UADO;QAEP1G,IAAI,EAAJA,IAFO;QAGPyB,eAAe,EAAE;UAAA,OAAMA,gBAAe,CAACzB,IAAI,CAAC4E,GAAN,CAArB;QAAA,CAHV;QAIPzD,QAAQ,EAAEA,QAAQ,CAAC2D,IAAT,CACN,UAACwD,OAAD;UAAA,OACIA,OAAO,CAAC1D,GAAR,KAAgB5E,IAAI,CAAC4E,GADzB;QAAA,CADM,CAJH;QAQP2D,QAAQ;UAAA,uGAAE;YAAA;cAAA;gBAAA;kBAAA;oBAAA,MACF,OAAO5H,QAAP,KAAoB,UADlB;sBAAA;sBAAA;oBAAA;;oBAAA,KAEEE,QAFF;sBAAA;sBAAA;oBAAA;;oBAGEO,cAAc,CAACpB,IAAD,CAAd;oBAHF;;kBAAA;oBAAA;oBAAA,OAOIW,QAAQ,CAACX,IAAD,CAPZ;;kBAAA;oBAQFU,OAAO,IAAIA,OAAO,EAAlB;;kBARE;kBAAA;oBAAA;gBAAA;cAAA;YAAA;UAAA,CAAF;;UAAA;YAAA;UAAA;;UAAA;QAAA;MARD,CAAD,CADD;IAAA,CAAb,CADL,GAuBKL,WAAW,CAAC;MACRC,0BAA0B,EAA1BA,0BADQ;MAERC,WAAW,EAAXA,WAFQ;MAGRC,gBAAgB,EAAhBA;IAHQ,CAAD,CAxBrB,CARJ,CAPJ,eA8CI,6BAAC,sBAAD;MAAe,MAAM,EAAEI,MAAvB;MAA+B,SAAS,EAAEW;IAA1C,EA9CJ,CAzBJ,CAtCJ,CADH;EAAA,CApBL,CADJ;AA0IH,CApaD;;AAsaAd,eAAe,CAAC+H,YAAhB,GAA+B;EAC3B3H,QAAQ,EAAE,KADiB;EAE3BC,OAAO,EAAE,QAFkB;EAG3BE,eAAe,EAAE,QAHU;EAI3BD,gBAAgB,EAAE;AAJS,CAA/B;eAOeN,e"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["style","leftDrawer","css","float","display","width","height","backgroundColor","padding","noTagged","paddingTop","textAlign","color","TagList","styled","flexDirection","Tag","alignItems","cursor","paddingLeft","svg","marginRight","LeftSidebar","props","toggleTag","queryParams","tags","scope","activeTags","Array","isArray","useQuery","LIST_TAGS","variables","where","getWhere","data","list","get","length","tagList","sortBy","filter","tag","map","item","index","className","includes","formatTagAsLabel"],"sources":["LeftSidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get\";\nimport sortBy from \"lodash/sortBy\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { ReactComponent as TagIcon } from \"./icons/round-label-24px.svg\";\nimport { LIST_TAGS } from \"./graphql\";\nimport { getWhere } from \"./FileManagerContext\";\nimport { formatTagAsLabel } from \"./FileDetails/Tags\";\n\nconst style = {\n leftDrawer: css({\n float: \"left\",\n display: \"inline-block\",\n width: 250,\n height: \"100%\",\n backgroundColor: \"var(--mdc-theme-surface)\",\n padding: 10\n }),\n noTagged: css({\n paddingTop: 100,\n textAlign: \"center\",\n color: \"var(--mdc-theme-on-surface)\"\n })\n};\n\nconst TagList = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\"\n});\n\nconst Tag = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n height: 40,\n alignItems: \"center\",\n cursor: \"pointer\",\n paddingLeft: 15,\n color: \"var(--mdc-theme-on-surface)\",\n svg: {\n color: \"var(--mdc-theme-on-surface)\",\n marginRight: 10\n },\n \"&:hover\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n },\n \"&.active\": {\n svg: {\n color: \"var(--mdc-theme-secondary)\"\n }\n }\n});\n\ninterface LeftSidebarProps {\n toggleTag: (item: string) => void;\n queryParams: {\n tags: string[];\n scope: string;\n };\n}\nconst LeftSidebar: React.FC<LeftSidebarProps> = props => {\n const {\n toggleTag,\n queryParams: { tags, scope }\n } = props;\n const activeTags = Array.isArray(tags) ? tags : [];\n\n const { data } = useQuery(LIST_TAGS, { variables: { where: getWhere(scope) } });\n\n const list = get(data, \"fileManager.listTags\", []);\n\n if (list.length === 0) {\n return (\n <div className={style.leftDrawer} data-testid={\"fm.left-drawer.empty-tag\"}>\n <div className={style.noTagged}>\n Once you tag an image, the tag will be displayed here.\n </div>\n </div>\n );\n }\n // Sort \"tags\" list in \"ASC\" order.\n const tagList = sortBy(list);\n\n return (\n <div className={style.leftDrawer}>\n <TagList data-testid={\"fm.left-drawer.tag-list\"}>\n {tagList\n .filter(tag => tag !== scope)\n .map((item, index) => {\n const className = activeTags.includes(item) ? \"active\" : \"\";\n return (\n <Tag\n className={className}\n key={item + index}\n onClick={() => toggleTag(item)}\n >\n <Icon icon={<TagIcon />} /> {formatTagAsLabel(item, scope)}\n </Tag>\n );\n })}\n </TagList>\n </div>\n );\n};\n\nexport default LeftSidebar;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,KAAK,GAAG;EACVC,UAAU,eAAE,IAAAC,YAAA,EAAI;IACZC,KAAK,EAAE,MADK;IAEZC,OAAO,EAAE,cAFG;IAGZC,KAAK,EAAE,GAHK;IAIZC,MAAM,EAAE,MAJI;IAKZC,eAAe,EAAE,0BALL;IAMZC,OAAO,EAAE;EANG,CAAJ,sBADF;EASVC,QAAQ,eAAE,IAAAP,YAAA,EAAI;IACVQ,UAAU,EAAE,GADF;IAEVC,SAAS,EAAE,QAFD;IAGVC,KAAK,EAAE;EAHG,CAAJ;AATA,CAAd;AAgBA,IAAMC,OAAO,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC1BV,OAAO,EAAE,MADiB;EAE1BW,aAAa,EAAE;AAFW,CAAjB,CAAb;AAKA,IAAMC,GAAG,oBAAGF,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACtBV,OAAO,EAAE,MADa;EAEtBW,aAAa,EAAE,KAFO;EAGtBT,MAAM,EAAE,EAHc;EAItBW,UAAU,EAAE,QAJU;EAKtBC,MAAM,EAAE,SALc;EAMtBC,WAAW,EAAE,EANS;EAOtBP,KAAK,EAAE,6BAPe;EAQtBQ,GAAG,EAAE;IACDR,KAAK,EAAE,6BADN;IAEDS,WAAW,EAAE;EAFZ,CARiB;EAYtB,WAAW;IACPd,eAAe,EAAE;EADV,CAZW;EAetB,YAAY;IACRa,GAAG,EAAE;MACDR,KAAK,EAAE;IADN;EADG;AAfU,CAAjB,CAAT;;AA6BA,IAAMU,WAAuC,GAAG,SAA1CA,WAA0C,CAAAC,KAAK,EAAI;EACrD,IACIC,SADJ,GAGID,KAHJ,CACIC,SADJ;EAAA,yBAGID,KAHJ,CAEIE,WAFJ;EAAA,IAEmBC,IAFnB,sBAEmBA,IAFnB;EAAA,IAEyBC,KAFzB,sBAEyBA,KAFzB;EAIA,IAAMC,UAAU,GAAGC,KAAK,CAACC,OAAN,CAAcJ,IAAd,IAAsBA,IAAtB,GAA6B,EAAhD;;EAEA,gBAAiB,IAAAK,oBAAA,EAASC,kBAAT,EAAoB;IAAEC,SAAS,EAAE;MAAEC,KAAK,EAAE,IAAAC,4BAAA,EAASR,KAAT;IAAT;EAAb,CAApB,CAAjB;EAAA,IAAQS,IAAR,aAAQA,IAAR;;EAEA,IAAMC,IAAI,GAAG,IAAAC,YAAA,EAAIF,IAAJ,EAAU,sBAAV,EAAkC,EAAlC,CAAb;;EAEA,IAAIC,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;IACnB,oBACI;MAAK,SAAS,EAAEvC,KAAK,CAACC,UAAtB;MAAkC,eAAa;IAA/C,gBACI;MAAK,SAAS,EAAED,KAAK,CAACS;IAAtB,
|
|
1
|
+
{"version":3,"names":["style","leftDrawer","css","float","display","width","height","backgroundColor","padding","noTagged","paddingTop","textAlign","color","TagList","styled","flexDirection","Tag","alignItems","cursor","paddingLeft","svg","marginRight","LeftSidebar","props","toggleTag","queryParams","tags","scope","activeTags","Array","isArray","useQuery","LIST_TAGS","variables","where","getWhere","data","list","get","length","tagList","sortBy","filter","tag","map","item","index","className","includes","formatTagAsLabel"],"sources":["LeftSidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get\";\nimport sortBy from \"lodash/sortBy\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { ReactComponent as TagIcon } from \"./icons/round-label-24px.svg\";\nimport { LIST_TAGS } from \"./graphql\";\nimport { getWhere } from \"./FileManagerContext\";\nimport { formatTagAsLabel } from \"./FileDetails/Tags\";\n\nconst style = {\n leftDrawer: css({\n float: \"left\",\n display: \"inline-block\",\n width: 250,\n height: \"100%\",\n backgroundColor: \"var(--mdc-theme-surface)\",\n padding: 10\n }),\n noTagged: css({\n paddingTop: 100,\n textAlign: \"center\",\n color: \"var(--mdc-theme-on-surface)\"\n })\n};\n\nconst TagList = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\"\n});\n\nconst Tag = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n height: 40,\n alignItems: \"center\",\n cursor: \"pointer\",\n paddingLeft: 15,\n color: \"var(--mdc-theme-on-surface)\",\n svg: {\n color: \"var(--mdc-theme-on-surface)\",\n marginRight: 10\n },\n \"&:hover\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n },\n \"&.active\": {\n svg: {\n color: \"var(--mdc-theme-secondary)\"\n }\n }\n});\n\ninterface LeftSidebarProps {\n toggleTag: (item: string) => void;\n queryParams: {\n tags: string[];\n scope: string;\n };\n}\nconst LeftSidebar: React.FC<LeftSidebarProps> = props => {\n const {\n toggleTag,\n queryParams: { tags, scope }\n } = props;\n const activeTags = Array.isArray(tags) ? tags : [];\n\n const { data } = useQuery(LIST_TAGS, { variables: { where: getWhere(scope) } });\n\n const list = get(data, \"fileManager.listTags\", []);\n\n if (list.length === 0) {\n return (\n <div className={style.leftDrawer} data-testid={\"fm.left-drawer.empty-tag\"}>\n <div className={style.noTagged}>\n Once you tag an image, the tag will be displayed here.\n </div>\n </div>\n );\n }\n // Sort \"tags\" list in \"ASC\" order.\n const tagList = sortBy(list);\n\n return (\n <div className={style.leftDrawer}>\n <TagList data-testid={\"fm.left-drawer.tag-list\"}>\n {tagList\n .filter(tag => tag !== scope)\n .map((item, index) => {\n const className = activeTags.includes(item) ? \"active\" : \"\";\n return (\n <Tag\n className={className}\n key={item + index}\n onClick={() => toggleTag(item)}\n >\n <Icon icon={<TagIcon />} /> {formatTagAsLabel(item, scope)}\n </Tag>\n );\n })}\n </TagList>\n </div>\n );\n};\n\nexport default LeftSidebar;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["styles","css","padding","textAlign","position","width","DropFilesHere"],"sources":["NoResults.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\n\nconst styles = css({\n padding: \"100px 0px\",\n textAlign: \"center\",\n position: \"absolute\",\n width: \"100%\"\n});\n\nconst DropFilesHere: React.FC = () => {\n return (\n <div className={styles}>\n <div>No results found.</div>\n </div>\n );\n};\nexport default DropFilesHere;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA,IAAMA,MAAM,gBAAG,IAAAC,YAAA,EAAI;EACfC,OAAO,EAAE,WADM;EAEfC,SAAS,EAAE,QAFI;EAGfC,QAAQ,EAAE,UAHK;EAIfC,KAAK,EAAE;AAJQ,CAAJ,kBAAf;;AAOA,IAAMC,aAAuB,GAAG,SAA1BA,aAA0B,GAAM;EAClC,oBACI;IAAK,SAAS,EAAEN;EAAhB,gBACI,
|
|
1
|
+
{"version":3,"names":["styles","css","padding","textAlign","position","width","DropFilesHere"],"sources":["NoResults.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\n\nconst styles = css({\n padding: \"100px 0px\",\n textAlign: \"center\",\n position: \"absolute\",\n width: \"100%\"\n});\n\nconst DropFilesHere: React.FC = () => {\n return (\n <div className={styles}>\n <div>No results found.</div>\n </div>\n );\n};\nexport default DropFilesHere;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA,IAAMA,MAAM,gBAAG,IAAAC,YAAA,EAAI;EACfC,OAAO,EAAE,WADM;EAEfC,SAAS,EAAE,QAFI;EAGfC,QAAQ,EAAE,UAHK;EAIfC,KAAK,EAAE;AAJQ,CAAJ,kBAAf;;AAOA,IAAMC,aAAuB,GAAG,SAA1BA,aAA0B,GAAM;EAClC,oBACI;IAAK,SAAS,EAAEN;EAAhB,gBACI,0CAAK,mBAAL,CADJ,CADJ;AAKH,CAND;;eAOeM,a"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-admin",
|
|
3
|
-
"version": "5.34.
|
|
3
|
+
"version": "5.34.5-beta.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "A collection of plugins that together form a complete admin interface, customizable and extensible with Webiny apps and plugins.",
|
|
6
6
|
"repository": {
|
|
@@ -20,17 +20,17 @@
|
|
|
20
20
|
"@svgr/webpack": "6.4.0",
|
|
21
21
|
"@types/mime": "2.0.3",
|
|
22
22
|
"@types/react": "17.0.39",
|
|
23
|
-
"@webiny/app": "5.34.
|
|
24
|
-
"@webiny/app-security": "5.34.
|
|
25
|
-
"@webiny/app-wcp": "5.34.
|
|
26
|
-
"@webiny/form": "5.34.
|
|
27
|
-
"@webiny/plugins": "5.34.
|
|
28
|
-
"@webiny/react-composition": "5.34.
|
|
29
|
-
"@webiny/react-router": "5.34.
|
|
30
|
-
"@webiny/telemetry": "5.34.
|
|
31
|
-
"@webiny/ui": "5.34.
|
|
32
|
-
"@webiny/ui-composer": "5.34.
|
|
33
|
-
"@webiny/validation": "5.34.
|
|
23
|
+
"@webiny/app": "5.34.5-beta.1",
|
|
24
|
+
"@webiny/app-security": "5.34.5-beta.1",
|
|
25
|
+
"@webiny/app-wcp": "5.34.5-beta.1",
|
|
26
|
+
"@webiny/form": "5.34.5-beta.1",
|
|
27
|
+
"@webiny/plugins": "5.34.5-beta.1",
|
|
28
|
+
"@webiny/react-composition": "5.34.5-beta.1",
|
|
29
|
+
"@webiny/react-router": "5.34.5-beta.1",
|
|
30
|
+
"@webiny/telemetry": "5.34.5-beta.1",
|
|
31
|
+
"@webiny/ui": "5.34.5-beta.1",
|
|
32
|
+
"@webiny/ui-composer": "5.34.5-beta.1",
|
|
33
|
+
"@webiny/validation": "5.34.5-beta.1",
|
|
34
34
|
"apollo-cache": "1.3.5",
|
|
35
35
|
"apollo-client": "2.6.10",
|
|
36
36
|
"apollo-link": "1.2.14",
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"@types/bytes": "^3.1.1",
|
|
71
71
|
"@types/graphlib": "^2.1.8",
|
|
72
72
|
"@types/store": "^2.0.2",
|
|
73
|
-
"@webiny/cli": "^5.34.
|
|
74
|
-
"@webiny/project-utils": "^5.34.
|
|
73
|
+
"@webiny/cli": "^5.34.5-beta.1",
|
|
74
|
+
"@webiny/project-utils": "^5.34.5-beta.1",
|
|
75
75
|
"babel-plugin-emotion": "^9.2.8",
|
|
76
76
|
"babel-plugin-lodash": "^3.3.4",
|
|
77
77
|
"rimraf": "^3.0.2",
|
|
@@ -98,5 +98,5 @@
|
|
|
98
98
|
]
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
|
-
"gitHead": "
|
|
101
|
+
"gitHead": "718b33de80a986137bd489a3464d0e1194466502"
|
|
102
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","DeleteAction","props","file","useSnackbar","showSnackbar","useMutation","DELETE_FILE","variables","id","deleteFile","margin"],"sources":["DeleteAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useMutation } from \"@apollo/react-hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { FileManagerFileItem } from \"~/components/FileManager\";\nconst t = i18n.ns(\"app-admin/file-manager/files/delete-action\");\n\nimport { ReactComponent as DeleteIcon } from \"../../../components/FileManager/icons/delete.svg\";\nimport { DELETE_FILE } from \"~/components/FileManager/graphql\";\n\ninterface DeleteActionProps {\n file: FileManagerFileItem;\n}\nconst DeleteAction: React.FC<DeleteActionProps> = props => {\n const { file } = props;\n const { showSnackbar } = useSnackbar();\n const [deleteFile] = useMutation(DELETE_FILE, {\n variables: {\n id: file.id\n }\n });\n\n return (\n <>\n <Tooltip content={<span>Edit image</span>} placement={\"bottom\"}>\n <IconButton\n icon={<DeleteIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={async () => {\n await deleteFile();\n showSnackbar(t`File deleted.`);\n }}\n />\n </Tooltip>\n </>\n );\n};\n\nexport default DeleteAction;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AACA;;;;AAHA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,4CAAR,CAAV;;AAQA,IAAMC,YAAyC,GAAG,SAA5CA,YAA4C,CAAAC,KAAK,EAAI;EACvD,IAAQC,IAAR,GAAiBD,KAAjB,CAAQC,IAAR;;EACA,mBAAyB,IAAAC,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR;;EACA,mBAAqB,IAAAC,uBAAA,EAAYC,oBAAZ,EAAyB;IAC1CC,SAAS,EAAE;MACPC,EAAE,EAAEN,IAAI,CAACM;IADF;EAD+B,CAAzB,CAArB;EAAA;EAAA,IAAOC,UAAP;;EAMA,oBACI,yEACI,6BAAC,gBAAD;IAAS,OAAO,eAAE,
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","DeleteAction","props","file","useSnackbar","showSnackbar","useMutation","DELETE_FILE","variables","id","deleteFile","margin"],"sources":["DeleteAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useMutation } from \"@apollo/react-hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { FileManagerFileItem } from \"~/components/FileManager\";\nconst t = i18n.ns(\"app-admin/file-manager/files/delete-action\");\n\nimport { ReactComponent as DeleteIcon } from \"../../../components/FileManager/icons/delete.svg\";\nimport { DELETE_FILE } from \"~/components/FileManager/graphql\";\n\ninterface DeleteActionProps {\n file: FileManagerFileItem;\n}\nconst DeleteAction: React.FC<DeleteActionProps> = props => {\n const { file } = props;\n const { showSnackbar } = useSnackbar();\n const [deleteFile] = useMutation(DELETE_FILE, {\n variables: {\n id: file.id\n }\n });\n\n return (\n <>\n <Tooltip content={<span>Edit image</span>} placement={\"bottom\"}>\n <IconButton\n icon={<DeleteIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={async () => {\n await deleteFile();\n showSnackbar(t`File deleted.`);\n }}\n />\n </Tooltip>\n </>\n );\n};\n\nexport default DeleteAction;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AACA;;;;AAHA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,4CAAR,CAAV;;AAQA,IAAMC,YAAyC,GAAG,SAA5CA,YAA4C,CAAAC,KAAK,EAAI;EACvD,IAAQC,IAAR,GAAiBD,KAAjB,CAAQC,IAAR;;EACA,mBAAyB,IAAAC,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR;;EACA,mBAAqB,IAAAC,uBAAA,EAAYC,oBAAZ,EAAyB;IAC1CC,SAAS,EAAE;MACPC,EAAE,EAAEN,IAAI,CAACM;IADF;EAD+B,CAAzB,CAArB;EAAA;EAAA,IAAOC,UAAP;;EAMA,oBACI,yEACI,6BAAC,gBAAD;IAAS,OAAO,eAAE,2CAAM,YAAN,CAAlB;IAA2C,SAAS,EAAE;EAAtD,gBACI,6BAAC,kBAAD;IACI,IAAI,eAAE,6BAAC,sBAAD;MAAY,KAAK,EAAE;QAAEC,MAAM,EAAE;MAAV;IAAnB,EADV;IAEI,OAAO,sGAAE;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACCD,UAAU,EADX;;YAAA;cAELL,YAAY,CAACP,CAAD,iGAAZ;;YAFK;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAF;EAFX,EADJ,CADJ,CADJ;AAaH,CAtBD;;eAwBeG,Y"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["toDataUrl","url","Promise","resolve","xhr","window","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","open","responseType","send","initialState","showImageEditor","dataUrl","reducer","state","action","next","type","EditAction","props","file","uploadFile","validateFiles","canEdit","React","useReducer","dispatch","useSnackbar","showSnackbar","margin","src","blob","dataURLtoBlob","errors","length","outputFileSelectionError","name"],"sources":["EditAction.tsx"],"sourcesContent":["import * as React from \"react\";\n/**\n * Package react-hotkeyz has no types.\n */\n// @ts-ignore\nimport { Hotkeys } from \"react-hotkeyz\";\n/**\n * Package dataurl-to-blob has no types.\n */\n// @ts-ignore\nimport dataURLtoBlob from \"dataurl-to-blob\";\nimport { ImageEditorDialog } from \"@webiny/ui/ImageUpload\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { outputFileSelectionError } from \"~/components/FileManager/outputFileSelectionError\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { ReactComponent as EditIcon } from \"../icons/edit.svg\";\nimport { FileItem } from \"~/components/FileManager/types\";\n\nfunction toDataUrl(url: string): Promise<string> {\n return new Promise((resolve: (value: string) => void) => {\n const xhr = new window.XMLHttpRequest();\n xhr.onload = function () {\n const reader = new window.FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n });\n}\ninterface State {\n showImageEditor: boolean;\n dataUrl: string | null;\n}\ninterface Action {\n type: \"setDataUrl\" | \"hideImageEditor\";\n dataUrl?: string | null;\n}\nconst initialState: State = {\n showImageEditor: false,\n dataUrl: null\n};\nconst reducer = (state: State, action: Action): State => {\n const next: State = { ...state };\n\n switch (action.type) {\n case \"setDataUrl\":\n next.dataUrl = action.dataUrl as string;\n next.showImageEditor = true;\n break;\n case \"hideImageEditor\":\n next.dataUrl = null;\n next.showImageEditor = false;\n break;\n }\n\n return next;\n};\n\ninterface EditActionProps {\n file: FileItem;\n uploadFile: (file: FileItem) => void;\n validateFiles: (blobs: any[]) => Error[];\n canEdit: (file: FileItem) => boolean;\n}\n\nconst EditAction: React.FC<EditActionProps> = props => {\n const { file, uploadFile, validateFiles, canEdit } = props;\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const { showSnackbar } = useSnackbar();\n // Render nothing if the user don't have required permission for \"edit\".\n if (!canEdit(file)) {\n return null;\n }\n\n return (\n <>\n <Tooltip content={<span>Edit image</span>} placement={\"bottom\"}>\n <IconButton\n data-testid={\"fm-edit-image-button\"}\n icon={<EditIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={async () => {\n const dataUrl = await toDataUrl(file.src);\n dispatch({ type: \"setDataUrl\", dataUrl });\n }}\n />\n </Tooltip>\n <Hotkeys zIndex={60} disabled={!state.dataUrl}>\n <ImageEditorDialog\n data-testid={\"fm-image-editor-dialog\"}\n dialogZIndex={100}\n open={state.showImageEditor}\n src={state.dataUrl as string}\n onClose={() => dispatch({ type: \"hideImageEditor\" })}\n onAccept={src => {\n const blob = dataURLtoBlob(src);\n const errors = validateFiles([blob]);\n\n if (errors.length) {\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n showSnackbar(outputFileSelectionError(errors));\n } else {\n blob.name = file.name;\n uploadFile(blob);\n }\n\n dispatch({ type: \"hideImageEditor\" });\n }}\n />\n </Hotkeys>\n </>\n );\n};\n\nexport default EditAction;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAKA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAfA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAUA,SAASA,SAAT,CAAmBC,GAAnB,EAAiD;EAC7C,OAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAsC;IACrD,IAAMC,GAAG,GAAG,IAAIC,MAAM,CAACC,cAAX,EAAZ;;IACAF,GAAG,CAACG,MAAJ,GAAa,YAAY;MACrB,IAAMC,MAAM,GAAG,IAAIH,MAAM,CAACI,UAAX,EAAf;;MACAD,MAAM,CAACE,SAAP,GAAmB,YAAY;QAC3BP,OAAO,CAACK,MAAM,CAACG,MAAR,CAAP;MACH,CAFD;;MAGAH,MAAM,CAACI,aAAP,CAAqBR,GAAG,CAACS,QAAzB;IACH,CAND;;IAOAT,GAAG,CAACU,IAAJ,CAAS,KAAT,EAAgBb,GAAhB;IACAG,GAAG,CAACW,YAAJ,GAAmB,MAAnB;IACAX,GAAG,CAACY,IAAJ;EACH,CAZM,CAAP;AAaH;;AASD,IAAMC,YAAmB,GAAG;EACxBC,eAAe,EAAE,KADO;EAExBC,OAAO,EAAE;AAFe,CAA5B;;AAIA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAACC,KAAD,EAAeC,MAAf,EAAyC;EACrD,IAAMC,IAAW,mCAAQF,KAAR,CAAjB;;EAEA,QAAQC,MAAM,CAACE,IAAf;IACI,KAAK,YAAL;MACID,IAAI,CAACJ,OAAL,GAAeG,MAAM,CAACH,OAAtB;MACAI,IAAI,CAACL,eAAL,GAAuB,IAAvB;MACA;;IACJ,KAAK,iBAAL;MACIK,IAAI,CAACJ,OAAL,GAAe,IAAf;MACAI,IAAI,CAACL,eAAL,GAAuB,KAAvB;MACA;EARR;;EAWA,OAAOK,IAAP;AACH,CAfD;;AAwBA,IAAME,UAAqC,GAAG,SAAxCA,UAAwC,CAAAC,KAAK,EAAI;EACnD,IAAQC,IAAR,GAAqDD,KAArD,CAAQC,IAAR;EAAA,IAAcC,UAAd,GAAqDF,KAArD,CAAcE,UAAd;EAAA,IAA0BC,aAA1B,GAAqDH,KAArD,CAA0BG,aAA1B;EAAA,IAAyCC,OAAzC,GAAqDJ,KAArD,CAAyCI,OAAzC;;EACA,wBAA0BC,KAAK,CAACC,UAAN,CAAiBZ,OAAjB,EAA0BH,YAA1B,CAA1B;EAAA;EAAA,IAAOI,KAAP;EAAA,IAAcY,QAAd;;EACA,mBAAyB,IAAAC,yBAAA,GAAzB;EAAA,IAAQC,YAAR,gBAAQA,YAAR,CAHmD,CAInD;;;EACA,IAAI,CAACL,OAAO,CAACH,IAAD,CAAZ,EAAoB;IAChB,OAAO,IAAP;EACH;;EAED,oBACI,uDACI,oBAAC,gBAAD;IAAS,OAAO,eAAE
|
|
1
|
+
{"version":3,"names":["toDataUrl","url","Promise","resolve","xhr","window","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","open","responseType","send","initialState","showImageEditor","dataUrl","reducer","state","action","next","type","EditAction","props","file","uploadFile","validateFiles","canEdit","React","useReducer","dispatch","useSnackbar","showSnackbar","margin","src","blob","dataURLtoBlob","errors","length","outputFileSelectionError","name"],"sources":["EditAction.tsx"],"sourcesContent":["import * as React from \"react\";\n/**\n * Package react-hotkeyz has no types.\n */\n// @ts-ignore\nimport { Hotkeys } from \"react-hotkeyz\";\n/**\n * Package dataurl-to-blob has no types.\n */\n// @ts-ignore\nimport dataURLtoBlob from \"dataurl-to-blob\";\nimport { ImageEditorDialog } from \"@webiny/ui/ImageUpload\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { outputFileSelectionError } from \"~/components/FileManager/outputFileSelectionError\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { ReactComponent as EditIcon } from \"../icons/edit.svg\";\nimport { FileItem } from \"~/components/FileManager/types\";\n\nfunction toDataUrl(url: string): Promise<string> {\n return new Promise((resolve: (value: string) => void) => {\n const xhr = new window.XMLHttpRequest();\n xhr.onload = function () {\n const reader = new window.FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n });\n}\ninterface State {\n showImageEditor: boolean;\n dataUrl: string | null;\n}\ninterface Action {\n type: \"setDataUrl\" | \"hideImageEditor\";\n dataUrl?: string | null;\n}\nconst initialState: State = {\n showImageEditor: false,\n dataUrl: null\n};\nconst reducer = (state: State, action: Action): State => {\n const next: State = { ...state };\n\n switch (action.type) {\n case \"setDataUrl\":\n next.dataUrl = action.dataUrl as string;\n next.showImageEditor = true;\n break;\n case \"hideImageEditor\":\n next.dataUrl = null;\n next.showImageEditor = false;\n break;\n }\n\n return next;\n};\n\ninterface EditActionProps {\n file: FileItem;\n uploadFile: (file: FileItem) => void;\n validateFiles: (blobs: any[]) => Error[];\n canEdit: (file: FileItem) => boolean;\n}\n\nconst EditAction: React.FC<EditActionProps> = props => {\n const { file, uploadFile, validateFiles, canEdit } = props;\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const { showSnackbar } = useSnackbar();\n // Render nothing if the user don't have required permission for \"edit\".\n if (!canEdit(file)) {\n return null;\n }\n\n return (\n <>\n <Tooltip content={<span>Edit image</span>} placement={\"bottom\"}>\n <IconButton\n data-testid={\"fm-edit-image-button\"}\n icon={<EditIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={async () => {\n const dataUrl = await toDataUrl(file.src);\n dispatch({ type: \"setDataUrl\", dataUrl });\n }}\n />\n </Tooltip>\n <Hotkeys zIndex={60} disabled={!state.dataUrl}>\n <ImageEditorDialog\n data-testid={\"fm-image-editor-dialog\"}\n dialogZIndex={100}\n open={state.showImageEditor}\n src={state.dataUrl as string}\n onClose={() => dispatch({ type: \"hideImageEditor\" })}\n onAccept={src => {\n const blob = dataURLtoBlob(src);\n const errors = validateFiles([blob]);\n\n if (errors.length) {\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n showSnackbar(outputFileSelectionError(errors));\n } else {\n blob.name = file.name;\n uploadFile(blob);\n }\n\n dispatch({ type: \"hideImageEditor\" });\n }}\n />\n </Hotkeys>\n </>\n );\n};\n\nexport default EditAction;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SearchBar","props","active","searchTerm","previous","current","plugins","list","byType","hotKeys","undefined","React","createRef","e","i","state","length","hotKey","preventOpen","preventDefault","input","focus","plugin","setState","newState","set","query","URLSearchParams","search","JSON","stringify","history","push","pathname","route","toString","find","p","location","parse","get","downshift","item","label","downshiftProps","isOpen","openMenu","closeMenu","getInputProps","width","esc","document","activeElement","blur","handleOpenHotkey","cancelSearchTerm","enter","setTimeout","selectedItem","submitSearchTerm","classnames","searchWrapper","icon","placeholder","className","searchBarInput","ref","value","onClick","onBlur","onFocus","onChange","target","Component","SearchBarContainer","routerProps","useRouter","makeComposable"],"sources":["SearchBar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { set } from \"dot-prop-immutable\";\nimport { useRouter, UseRouter } from \"@webiny/react-router\";\nimport Downshift from \"downshift\";\nimport { plugins } from \"@webiny/plugins\";\nimport { AdminGlobalSearchPlugin, AdminGlobalSearchPreventHotkeyPlugin } from \"~/types\";\nimport classnames from \"classnames\";\n/**\n * Package react-hotkeyz does not have types.\n */\n// @ts-ignore\nimport { Hotkeys } from \"react-hotkeyz\";\n\n// UI components\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport SearchBarDropdown from \"./SearchBarDropdown\";\n\n// Icons\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\n\n// Local components\nimport {\n SearchBarWrapper,\n SearchBarInputWrapper,\n SearchShortcut,\n searchBarInput,\n icon,\n searchWrapper\n} from \"./styled\";\nimport { makeComposable } from \"~/index\";\n\ntype SearchBarProps = UseRouter;\n\nexport interface SearchBarState {\n active: boolean;\n searchTerm: { previous: string; current: string };\n plugins: {\n list: ReadonlyArray<AdminGlobalSearchPlugin>;\n hotKeys: ReadonlyArray<AdminGlobalSearchPreventHotkeyPlugin>;\n current?: AdminGlobalSearchPlugin;\n };\n}\n\nclass SearchBar extends React.Component<SearchBarProps, SearchBarState> {\n public override state: SearchBarState = {\n active: false,\n searchTerm: {\n previous: \"\",\n current: \"\"\n },\n plugins: {\n // List of all registered \"admin-global-search\" plugins.\n get list() {\n return plugins.byType<AdminGlobalSearchPlugin>(\"admin-global-search\");\n },\n hotKeys: plugins.byType<AdminGlobalSearchPreventHotkeyPlugin>(\n \"admin-global-search-prevent-hotkey\"\n ),\n // Current plugin - set by examining current route and its query params (on construct).\n current: undefined\n }\n };\n\n /**\n * Helps us trigger some of the downshift's methods (eg. clearSelection) and helps us to avoid adding state.\n */\n public readonly downshift: any = React.createRef();\n\n /**\n * At some point we must programmatically focus the input.\n */\n private readonly input = React.createRef<HTMLInputElement>();\n\n /**\n * Let's check if current route is defined in one of the registered plugins.\n * If so, then check current route query for search term and set it as default value of search input.\n * @param props\n */\n constructor(props: SearchBarProps) {\n super(props);\n this.state.plugins.current = this.state.plugins.list.find(\n p => p.route === props.location.pathname\n );\n\n if (this.state.plugins.current) {\n let search;\n const query = new URLSearchParams(props.location.search);\n try {\n search = JSON.parse(query.get(\"search\") || \"\").query;\n } catch (e) {\n search = query.get(\"search\");\n }\n\n this.state.searchTerm.current = search || \"\";\n this.state.searchTerm.previous = this.state.searchTerm.current;\n }\n }\n\n private readonly handleOpenHotkey = (e: React.KeyboardEvent): void => {\n for (let i = 0; i < this.state.plugins.hotKeys.length; i++) {\n const hotKey = this.state.plugins.hotKeys[i];\n if (hotKey.preventOpen(e)) {\n return;\n }\n }\n\n e.preventDefault();\n if (!this.input.current) {\n return;\n }\n this.input.current.focus();\n };\n\n /**\n * Re-routes to given route (provided by the plugin) with needed search query params.\n * It also manages previous and current search terms and automatically highlighted item in dropdown.\n * @param plugin\n */\n public readonly submitSearchTerm = (plugin: AdminGlobalSearchPlugin): void => {\n this.setState(\n state => {\n const newState = set(state, \"searchTerm.previous\", state.searchTerm.current);\n return set(newState, \"plugins.current\", plugin) as any;\n },\n () => {\n const query = new URLSearchParams();\n\n if (this.state.searchTerm.current) {\n // If \"search\" key in the plugin was defined, it means SearchInput values were set. Otherwise,\n // we need to send the plain string into the \"search\" query param. This behavior was needed\n // eg. for pages, since Page entity doesn't use regular SearchInput type, but plain string.\n if (plugin.search) {\n query.set(\n \"search\",\n JSON.stringify({\n query: this.state.searchTerm.current,\n ...plugin.search\n })\n );\n } else {\n query.set(\"search\", this.state.searchTerm.current);\n }\n }\n\n this.props.history.push({\n pathname: plugin.route,\n search: query.toString()\n });\n }\n );\n };\n\n private readonly cancelSearchTerm = (): void => {\n this.setState(state => {\n state.searchTerm.current = state.searchTerm.previous;\n return state;\n });\n };\n\n public override render() {\n return (\n <Downshift ref={this.downshift} itemToString={item => item && item.label}>\n {downshiftProps => {\n const { isOpen, openMenu, closeMenu, getInputProps } = downshiftProps;\n\n return (\n <div style={{ width: \"100%\" }}>\n <Hotkeys\n zIndex={10}\n keys={{\n // @ts-ignore\n esc: () => document.activeElement.blur(),\n \"/\": this.handleOpenHotkey\n }}\n />\n\n <Hotkeys\n zIndex={11}\n disabled={!isOpen}\n keys={{\n esc: () => {\n this.cancelSearchTerm();\n closeMenu();\n },\n enter: () =>\n setTimeout(() => {\n const { selectedItem } = this.downshift.current.state;\n if (selectedItem) {\n closeMenu();\n this.submitSearchTerm(selectedItem);\n }\n })\n }}\n />\n\n <Elevation\n className={classnames(searchWrapper, { active: this.state.active })}\n z={0}\n >\n <SearchBarWrapper>\n <SearchBarInputWrapper>\n <Icon className={icon} icon={<SearchIcon />} />\n\n <React.Fragment>\n <input\n {...getInputProps({\n placeholder: \"Search...\",\n className: classnames(\n \"mdc-text-field__input\",\n searchBarInput\n ),\n ref: this.input,\n value: this.state.searchTerm.current,\n // @ts-ignore\n onClick: openMenu,\n onBlur: () => {\n this.cancelSearchTerm();\n this.setState({ active: false });\n },\n onFocus: () => {\n this.setState({ active: true });\n openMenu();\n },\n onChange: (\n e: React.ChangeEvent<HTMLInputElement>\n ) => {\n const value = e.target.value || \"\";\n this.setState(state => {\n state.searchTerm.current = value;\n return state;\n });\n }\n })}\n />\n </React.Fragment>\n\n <SearchShortcut>/</SearchShortcut>\n </SearchBarInputWrapper>\n </SearchBarWrapper>\n {isOpen && <SearchBarDropdown context={this} />}\n </Elevation>\n </div>\n );\n }}\n </Downshift>\n );\n }\n}\n\nconst SearchBarContainer: React.FC = () => {\n const routerProps = useRouter();\n\n return <SearchBar {...routerProps} />;\n};\n\nexport default makeComposable(\"SearchBarContainer\", SearchBarContainer);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SearchBar","props","active","searchTerm","previous","current","plugins","list","byType","hotKeys","undefined","React","createRef","e","i","state","length","hotKey","preventOpen","preventDefault","input","focus","plugin","setState","newState","set","query","URLSearchParams","search","JSON","stringify","history","push","pathname","route","toString","find","p","location","parse","get","downshift","item","label","downshiftProps","isOpen","openMenu","closeMenu","getInputProps","width","esc","document","activeElement","blur","handleOpenHotkey","cancelSearchTerm","enter","setTimeout","selectedItem","submitSearchTerm","classnames","searchWrapper","icon","placeholder","className","searchBarInput","ref","value","onClick","onBlur","onFocus","onChange","target","Component","SearchBarContainer","routerProps","useRouter","makeComposable"],"sources":["SearchBar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { set } from \"dot-prop-immutable\";\nimport { useRouter, UseRouter } from \"@webiny/react-router\";\nimport Downshift from \"downshift\";\nimport { plugins } from \"@webiny/plugins\";\nimport { AdminGlobalSearchPlugin, AdminGlobalSearchPreventHotkeyPlugin } from \"~/types\";\nimport classnames from \"classnames\";\n/**\n * Package react-hotkeyz does not have types.\n */\n// @ts-ignore\nimport { Hotkeys } from \"react-hotkeyz\";\n\n// UI components\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport SearchBarDropdown from \"./SearchBarDropdown\";\n\n// Icons\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\n\n// Local components\nimport {\n SearchBarWrapper,\n SearchBarInputWrapper,\n SearchShortcut,\n searchBarInput,\n icon,\n searchWrapper\n} from \"./styled\";\nimport { makeComposable } from \"~/index\";\n\ntype SearchBarProps = UseRouter;\n\nexport interface SearchBarState {\n active: boolean;\n searchTerm: { previous: string; current: string };\n plugins: {\n list: ReadonlyArray<AdminGlobalSearchPlugin>;\n hotKeys: ReadonlyArray<AdminGlobalSearchPreventHotkeyPlugin>;\n current?: AdminGlobalSearchPlugin;\n };\n}\n\nclass SearchBar extends React.Component<SearchBarProps, SearchBarState> {\n public override state: SearchBarState = {\n active: false,\n searchTerm: {\n previous: \"\",\n current: \"\"\n },\n plugins: {\n // List of all registered \"admin-global-search\" plugins.\n get list() {\n return plugins.byType<AdminGlobalSearchPlugin>(\"admin-global-search\");\n },\n hotKeys: plugins.byType<AdminGlobalSearchPreventHotkeyPlugin>(\n \"admin-global-search-prevent-hotkey\"\n ),\n // Current plugin - set by examining current route and its query params (on construct).\n current: undefined\n }\n };\n\n /**\n * Helps us trigger some of the downshift's methods (eg. clearSelection) and helps us to avoid adding state.\n */\n public readonly downshift: any = React.createRef();\n\n /**\n * At some point we must programmatically focus the input.\n */\n private readonly input = React.createRef<HTMLInputElement>();\n\n /**\n * Let's check if current route is defined in one of the registered plugins.\n * If so, then check current route query for search term and set it as default value of search input.\n * @param props\n */\n constructor(props: SearchBarProps) {\n super(props);\n this.state.plugins.current = this.state.plugins.list.find(\n p => p.route === props.location.pathname\n );\n\n if (this.state.plugins.current) {\n let search;\n const query = new URLSearchParams(props.location.search);\n try {\n search = JSON.parse(query.get(\"search\") || \"\").query;\n } catch (e) {\n search = query.get(\"search\");\n }\n\n this.state.searchTerm.current = search || \"\";\n this.state.searchTerm.previous = this.state.searchTerm.current;\n }\n }\n\n private readonly handleOpenHotkey = (e: React.KeyboardEvent): void => {\n for (let i = 0; i < this.state.plugins.hotKeys.length; i++) {\n const hotKey = this.state.plugins.hotKeys[i];\n if (hotKey.preventOpen(e)) {\n return;\n }\n }\n\n e.preventDefault();\n if (!this.input.current) {\n return;\n }\n this.input.current.focus();\n };\n\n /**\n * Re-routes to given route (provided by the plugin) with needed search query params.\n * It also manages previous and current search terms and automatically highlighted item in dropdown.\n * @param plugin\n */\n public readonly submitSearchTerm = (plugin: AdminGlobalSearchPlugin): void => {\n this.setState(\n state => {\n const newState = set(state, \"searchTerm.previous\", state.searchTerm.current);\n return set(newState, \"plugins.current\", plugin) as any;\n },\n () => {\n const query = new URLSearchParams();\n\n if (this.state.searchTerm.current) {\n // If \"search\" key in the plugin was defined, it means SearchInput values were set. Otherwise,\n // we need to send the plain string into the \"search\" query param. This behavior was needed\n // eg. for pages, since Page entity doesn't use regular SearchInput type, but plain string.\n if (plugin.search) {\n query.set(\n \"search\",\n JSON.stringify({\n query: this.state.searchTerm.current,\n ...plugin.search\n })\n );\n } else {\n query.set(\"search\", this.state.searchTerm.current);\n }\n }\n\n this.props.history.push({\n pathname: plugin.route,\n search: query.toString()\n });\n }\n );\n };\n\n private readonly cancelSearchTerm = (): void => {\n this.setState(state => {\n state.searchTerm.current = state.searchTerm.previous;\n return state;\n });\n };\n\n public override render() {\n return (\n <Downshift ref={this.downshift} itemToString={item => item && item.label}>\n {downshiftProps => {\n const { isOpen, openMenu, closeMenu, getInputProps } = downshiftProps;\n\n return (\n <div style={{ width: \"100%\" }}>\n <Hotkeys\n zIndex={10}\n keys={{\n // @ts-ignore\n esc: () => document.activeElement.blur(),\n \"/\": this.handleOpenHotkey\n }}\n />\n\n <Hotkeys\n zIndex={11}\n disabled={!isOpen}\n keys={{\n esc: () => {\n this.cancelSearchTerm();\n closeMenu();\n },\n enter: () =>\n setTimeout(() => {\n const { selectedItem } = this.downshift.current.state;\n if (selectedItem) {\n closeMenu();\n this.submitSearchTerm(selectedItem);\n }\n })\n }}\n />\n\n <Elevation\n className={classnames(searchWrapper, { active: this.state.active })}\n z={0}\n >\n <SearchBarWrapper>\n <SearchBarInputWrapper>\n <Icon className={icon} icon={<SearchIcon />} />\n\n <React.Fragment>\n <input\n {...getInputProps({\n placeholder: \"Search...\",\n className: classnames(\n \"mdc-text-field__input\",\n searchBarInput\n ),\n ref: this.input,\n value: this.state.searchTerm.current,\n // @ts-ignore\n onClick: openMenu,\n onBlur: () => {\n this.cancelSearchTerm();\n this.setState({ active: false });\n },\n onFocus: () => {\n this.setState({ active: true });\n openMenu();\n },\n onChange: (\n e: React.ChangeEvent<HTMLInputElement>\n ) => {\n const value = e.target.value || \"\";\n this.setState(state => {\n state.searchTerm.current = value;\n return state;\n });\n }\n })}\n />\n </React.Fragment>\n\n <SearchShortcut>/</SearchShortcut>\n </SearchBarInputWrapper>\n </SearchBarWrapper>\n {isOpen && <SearchBarDropdown context={this} />}\n </Elevation>\n </div>\n );\n }}\n </Downshift>\n );\n }\n}\n\nconst SearchBarContainer: React.FC = () => {\n const routerProps = useRouter();\n\n return <SearchBar {...routerProps} />;\n};\n\nexport default makeComposable(\"SearchBarContainer\", SearchBarContainer);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAKA;;AAGA;;AACA;;AACA;;AAGA;;AAGA;;AAQA;;AAvBA;AACA;AACA;AACA;AAGA;AAKA;AAGA;IAuBMA,S;;;;;EAoBF;AACJ;AACA;;EAGI;AACJ;AACA;;EAGI;AACJ;AACA;AACA;AACA;EACI,mBAAYC,KAAZ,EAAmC;IAAA;;IAAA;IAC/B,0BAAMA,KAAN;IAD+B,oFAlCK;MACpCC,MAAM,EAAE,KAD4B;MAEpCC,UAAU,EAAE;QACRC,QAAQ,EAAE,EADF;QAERC,OAAO,EAAE;MAFD,CAFwB;MAMpCC,OAAO,EAAE;QACL;QACA,IAAIC,IAAJ,GAAW;UACP,OAAOD,gBAAA,CAAQE,MAAR,CAAwC,qBAAxC,CAAP;QACH,CAJI;;QAKLC,OAAO,EAAEH,gBAAA,CAAQE,MAAR,CACL,oCADK,CALJ;QAQL;QACAH,OAAO,EAAEK;MATJ;IAN2B,CAkCL;IAAA,qGAZFC,KAAK,CAACC,SAAN,EAYE;IAAA,iGAPVD,KAAK,CAACC,SAAN,EAOU;IAAA,+FAoBC,UAACC,CAAD,EAAkC;MAClE,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,MAAKC,KAAL,CAAWT,OAAX,CAAmBG,OAAnB,CAA2BO,MAA/C,EAAuDF,CAAC,EAAxD,EAA4D;QACxD,IAAMG,MAAM,GAAG,MAAKF,KAAL,CAAWT,OAAX,CAAmBG,OAAnB,CAA2BK,CAA3B,CAAf;;QACA,IAAIG,MAAM,CAACC,WAAP,CAAmBL,CAAnB,CAAJ,EAA2B;UACvB;QACH;MACJ;;MAEDA,CAAC,CAACM,cAAF;;MACA,IAAI,CAAC,MAAKC,KAAL,CAAWf,OAAhB,EAAyB;QACrB;MACH;;MACD,MAAKe,KAAL,CAAWf,OAAX,CAAmBgB,KAAnB;IACH,CAjCkC;IAAA,+FAwCA,UAACC,MAAD,EAA2C;MAC1E,MAAKC,QAAL,CACI,UAAAR,KAAK,EAAI;QACL,IAAMS,QAAQ,GAAG,IAAAC,qBAAA,EAAIV,KAAJ,EAAW,qBAAX,EAAkCA,KAAK,CAACZ,UAAN,CAAiBE,OAAnD,CAAjB;QACA,OAAO,IAAAoB,qBAAA,EAAID,QAAJ,EAAc,iBAAd,EAAiCF,MAAjC,CAAP;MACH,CAJL,EAKI,YAAM;QACF,IAAMI,KAAK,GAAG,IAAIC,eAAJ,EAAd;;QAEA,IAAI,MAAKZ,KAAL,CAAWZ,UAAX,CAAsBE,OAA1B,EAAmC;UAC/B;UACA;UACA;UACA,IAAIiB,MAAM,CAACM,MAAX,EAAmB;YACfF,KAAK,CAACD,GAAN,CACI,QADJ,EAEII,IAAI,CAACC,SAAL;cACIJ,KAAK,EAAE,MAAKX,KAAL,CAAWZ,UAAX,CAAsBE;YADjC,GAEOiB,MAAM,CAACM,MAFd,EAFJ;UAOH,CARD,MAQO;YACHF,KAAK,CAACD,GAAN,CAAU,QAAV,EAAoB,MAAKV,KAAL,CAAWZ,UAAX,CAAsBE,OAA1C;UACH;QACJ;;QAED,MAAKJ,KAAL,CAAW8B,OAAX,CAAmBC,IAAnB,CAAwB;UACpBC,QAAQ,EAAEX,MAAM,CAACY,KADG;UAEpBN,MAAM,EAAEF,KAAK,CAACS,QAAN;QAFY,CAAxB;MAIH,CA7BL;IA+BH,CAxEkC;IAAA,+FA0EC,YAAY;MAC5C,MAAKZ,QAAL,CAAc,UAAAR,KAAK,EAAI;QACnBA,KAAK,CAACZ,UAAN,CAAiBE,OAAjB,GAA2BU,KAAK,CAACZ,UAAN,CAAiBC,QAA5C;QACA,OAAOW,KAAP;MACH,CAHD;IAIH,CA/EkC;IAE/B,MAAKA,KAAL,CAAWT,OAAX,CAAmBD,OAAnB,GAA6B,MAAKU,KAAL,CAAWT,OAAX,CAAmBC,IAAnB,CAAwB6B,IAAxB,CACzB,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAACH,KAAF,KAAYjC,KAAK,CAACqC,QAAN,CAAeL,QAA/B;IAAA,CADwB,CAA7B;;IAIA,IAAI,MAAKlB,KAAL,CAAWT,OAAX,CAAmBD,OAAvB,EAAgC;MAC5B,IAAIuB,MAAJ;MACA,IAAMF,KAAK,GAAG,IAAIC,eAAJ,CAAoB1B,KAAK,CAACqC,QAAN,CAAeV,MAAnC,CAAd;;MACA,IAAI;QACAA,MAAM,GAAGC,IAAI,CAACU,KAAL,CAAWb,KAAK,CAACc,GAAN,CAAU,QAAV,KAAuB,EAAlC,EAAsCd,KAA/C;MACH,CAFD,CAEE,OAAOb,CAAP,EAAU;QACRe,MAAM,GAAGF,KAAK,CAACc,GAAN,CAAU,QAAV,CAAT;MACH;;MAED,MAAKzB,KAAL,CAAWZ,UAAX,CAAsBE,OAAtB,GAAgCuB,MAAM,IAAI,EAA1C;MACA,MAAKb,KAAL,CAAWZ,UAAX,CAAsBC,QAAtB,GAAiC,MAAKW,KAAL,CAAWZ,UAAX,CAAsBE,OAAvD;IACH;;IAjB8B;EAkBlC;;;;WA+DD,kBAAyB;MAAA;;MACrB,oBACI,oBAAC,kBAAD;QAAW,GAAG,EAAE,KAAKoC,SAArB;QAAgC,YAAY,EAAE,sBAAAC,IAAI;UAAA,OAAIA,IAAI,IAAIA,IAAI,CAACC,KAAjB;QAAA;MAAlD,GACK,UAAAC,cAAc,EAAI;QACf,IAAQC,MAAR,GAAuDD,cAAvD,CAAQC,MAAR;QAAA,IAAgBC,QAAhB,GAAuDF,cAAvD,CAAgBE,QAAhB;QAAA,IAA0BC,SAA1B,GAAuDH,cAAvD,CAA0BG,SAA1B;QAAA,IAAqCC,aAArC,GAAuDJ,cAAvD,CAAqCI,aAArC;QAEA,oBACI;UAAK,KAAK,EAAE;YAAEC,KAAK,EAAE;UAAT;QAAZ,gBACI,oBAAC,qBAAD;UACI,MAAM,EAAE,EADZ;UAEI,IAAI,EAAE;YACF;YACAC,GAAG,EAAE;cAAA,OAAMC,QAAQ,CAACC,aAAT,CAAuBC,IAAvB,EAAN;YAAA,CAFH;YAGF,KAAK,MAAI,CAACC;UAHR;QAFV,EADJ,eAUI,oBAAC,qBAAD;UACI,MAAM,EAAE,EADZ;UAEI,QAAQ,EAAE,CAACT,MAFf;UAGI,IAAI,EAAE;YACFK,GAAG,EAAE,eAAM;cACP,MAAI,CAACK,gBAAL;;cACAR,SAAS;YACZ,CAJC;YAKFS,KAAK,EAAE;cAAA,OACHC,UAAU,CAAC,YAAM;gBACb,IAAQC,YAAR,GAAyB,MAAI,CAACjB,SAAL,CAAepC,OAAf,CAAuBU,KAAhD,CAAQ2C,YAAR;;gBACA,IAAIA,YAAJ,EAAkB;kBACdX,SAAS;;kBACT,MAAI,CAACY,gBAAL,CAAsBD,YAAtB;gBACH;cACJ,CANS,CADP;YAAA;UALL;QAHV,EAVJ,eA6BI,oBAAC,oBAAD;UACI,SAAS,EAAE,IAAAE,mBAAA,EAAWC,qBAAX,EAA0B;YAAE3D,MAAM,EAAE,MAAI,CAACa,KAAL,CAAWb;UAArB,CAA1B,CADf;UAEI,CAAC,EAAE;QAFP,gBAII,oBAAC,wBAAD,qBACI,oBAAC,6BAAD,qBACI,oBAAC,UAAD;UAAM,SAAS,EAAE4D,YAAjB;UAAuB,IAAI,eAAE,oBAAC,+BAAD;QAA7B,EADJ,eAGI,oBAAC,KAAD,CAAO,QAAP,qBACI,6BACQd,aAAa,CAAC;UACde,WAAW,EAAE,WADC;UAEdC,SAAS,EAAE,IAAAJ,mBAAA,EACP,uBADO,EAEPK,sBAFO,CAFG;UAMdC,GAAG,EAAE,MAAI,CAAC9C,KANI;UAOd+C,KAAK,EAAE,MAAI,CAACpD,KAAL,CAAWZ,UAAX,CAAsBE,OAPf;UAQd;UACA+D,OAAO,EAAEtB,QATK;UAUduB,MAAM,EAAE,kBAAM;YACV,MAAI,CAACd,gBAAL;;YACA,MAAI,CAAChC,QAAL,CAAc;cAAErB,MAAM,EAAE;YAAV,CAAd;UACH,CAba;UAcdoE,OAAO,EAAE,mBAAM;YACX,MAAI,CAAC/C,QAAL,CAAc;cAAErB,MAAM,EAAE;YAAV,CAAd;;YACA4C,QAAQ;UACX,CAjBa;UAkBdyB,QAAQ,EAAE,kBACN1D,CADM,EAEL;YACD,IAAMsD,KAAK,GAAGtD,CAAC,CAAC2D,MAAF,CAASL,KAAT,IAAkB,EAAhC;;YACA,MAAI,CAAC5C,QAAL,CAAc,UAAAR,KAAK,EAAI;cACnBA,KAAK,CAACZ,UAAN,CAAiBE,OAAjB,GAA2B8D,KAA3B;cACA,OAAOpD,KAAP;YACH,CAHD;UAIH;QA1Ba,CAAD,CADrB,CADJ,CAHJ,eAoCI,oBAAC,sBAAD,QAAgB,GAAhB,CApCJ,CADJ,CAJJ,EA4CK8B,MAAM,iBAAI,oBAAC,0BAAD;UAAmB,OAAO,EAAE;QAA5B,EA5Cf,CA7BJ,CADJ;MA8EH,CAlFL,CADJ;IAsFH;;;EA3MmBlC,KAAK,CAAC8D,S;;AA8M9B,IAAMC,kBAA4B,GAAG,SAA/BA,kBAA+B,GAAM;EACvC,IAAMC,WAAW,GAAG,IAAAC,sBAAA,GAApB;EAEA,oBAAO,oBAAC,SAAD,EAAeD,WAAf,CAAP;AACH,CAJD;;eAMe,IAAAE,gBAAA,EAAe,oBAAf,EAAqCH,kBAArC,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SearchBarDropdown","props","context","downshift","current","plugins","state","selectItem","setHighlightedIndex","list","indexOf","openMenu","submitSearchTerm","searchTerm","getMenuProps","getItemProps","selectedItem","highlightedIndex","searchBarDropdown","map","item","index","itemClassNames","highlighted","selected","route","className","classnames","onClick","iconSearchType","label","React","Component"],"sources":["SearchBarDropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { AdminGlobalSearchPlugin } from \"~/types\";\nimport classnames from \"classnames\";\nimport { List, ListItem, ListItemGraphic, ListItemText, ListItemMeta } from \"@webiny/ui/List\";\nimport { searchBarDropdown, iconSearchType } from \"./styled\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Actions as DownshiftActions, DownshiftState, PropGetters } from \"downshift\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { SearchBarState } from \"~/plugins/globalSearch/SearchBar\";\n\ninterface SearchBarDropdownPropsContextDownshiftCurrent\n extends DownshiftActions<any>,\n PropGetters<any> {\n state: DownshiftState<any>;\n}\ninterface SearchBarDropdownPropsContextDownshift {\n current: SearchBarDropdownPropsContextDownshiftCurrent;\n}\ninterface SearchBarDropdownPropsContext {\n downshift: SearchBarDropdownPropsContextDownshift;\n submitSearchTerm: (item: AdminGlobalSearchPlugin) => void;\n state: SearchBarState;\n}\ninterface SearchBarDropdownProps {\n context: SearchBarDropdownPropsContext;\n}\nexport default class SearchBarDropdown extends React.Component<SearchBarDropdownProps> {\n public override componentDidMount() {\n const {\n context: {\n downshift: { current: downshift },\n state: { plugins }\n }\n } = this.props;\n\n downshift.selectItem(plugins.current);\n downshift.setHighlightedIndex(\n plugins.list.indexOf(plugins.current as AdminGlobalSearchPlugin)\n );\n downshift.openMenu();\n }\n\n public override render() {\n const {\n context: {\n downshift: { current: downshift },\n submitSearchTerm,\n state: { plugins, searchTerm }\n }\n } = this.props;\n\n const {\n getMenuProps,\n getItemProps,\n state: { selectedItem, highlightedIndex }\n } = downshift;\n\n return (\n <Elevation z={2} className={searchBarDropdown}>\n <List {...getMenuProps()}>\n {plugins.list.map((item: AdminGlobalSearchPlugin, index) => {\n // Base classes.\n const itemClassNames = {\n highlighted: highlightedIndex === index,\n selected: false\n };\n\n // Add \"selected\" class if the item is selected.\n if (selectedItem && selectedItem === item) {\n itemClassNames.selected = true;\n }\n\n return (\n <ListItem\n key={item.route}\n {...getItemProps({\n index,\n item,\n className: classnames(itemClassNames),\n onClick: () => submitSearchTerm(item)\n })}\n >\n <ListItemGraphic>\n <Icon className={iconSearchType} icon={<SearchIcon />} />\n </ListItemGraphic>\n <ListItemText>\n {searchTerm.current || \"Search for all...\"}\n </ListItemText>\n <ListItemMeta>in {item.label}</ListItemMeta>\n </ListItem>\n );\n })}\n </List>\n </Elevation>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;IAmBqBA,iB;;;;;;;;;;;;WACjB,6BAAoC;MAChC,0BAKI,KAAKC,KALT,CACIC,OADJ;MAAA,IAE8BC,SAF9B,uBAEQA,SAFR,CAEqBC,OAFrB;MAAA,IAGiBC,OAHjB,uBAGQC,KAHR,CAGiBD,OAHjB;MAOAF,SAAS,CAACI,UAAV,CAAqBF,OAAO,CAACD,OAA7B;MACAD,SAAS,CAACK,mBAAV,CACIH,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAqBL,OAAO,CAACD,OAA7B,CADJ;MAGAD,SAAS,CAACQ,QAAV;IACH;;;WAED,kBAAyB;MACrB,2BAMI,KAAKV,KANT,CACIC,OADJ;MAAA,IAE8BC,SAF9B,wBAEQA,SAFR,CAEqBC,OAFrB;MAAA,IAGQQ,gBAHR,wBAGQA,gBAHR;MAAA,iDAIQN,KAJR;MAAA,IAIiBD,OAJjB,yBAIiBA,OAJjB;MAAA,IAI0BQ,UAJ1B,yBAI0BA,UAJ1B;MAQA,IACIC,YADJ,GAIIX,SAJJ,CACIW,YADJ;MAAA,IAEIC,YAFJ,GAIIZ,SAJJ,CAEIY,YAFJ;MAAA,uBAIIZ,SAJJ,CAGIG,KAHJ;MAAA,IAGaU,YAHb,oBAGaA,YAHb;MAAA,IAG2BC,gBAH3B,oBAG2BA,gBAH3B;MAMA,oBACI,oBAAC,oBAAD;QAAW,CAAC,EAAE,CAAd;QAAiB,SAAS,EAAEC;MAA5B,gBACI,oBAAC,UAAD,EAAUJ,YAAY,EAAtB,EACKT,OAAO,CAACI,IAAR,CAAaU,GAAb,CAAiB,UAACC,IAAD,EAAgCC,KAAhC,EAA0C;QACxD;QACA,IAAMC,cAAc,GAAG;UACnBC,WAAW,EAAEN,gBAAgB,KAAKI,KADf;UAEnBG,QAAQ,EAAE;QAFS,CAAvB,CAFwD,CAOxD;;QACA,IAAIR,YAAY,IAAIA,YAAY,KAAKI,IAArC,EAA2C;UACvCE,cAAc,CAACE,QAAf,GAA0B,IAA1B;QACH;;QAED,oBACI,oBAAC,cAAD;UACI,GAAG,EAAEJ,IAAI,CAACK;QADd,GAEQV,YAAY,CAAC;UACbM,KAAK,EAALA,KADa;UAEbD,IAAI,EAAJA,IAFa;UAGbM,SAAS,EAAE,IAAAC,mBAAA,EAAWL,cAAX,CAHE;UAIbM,OAAO,EAAE;YAAA,OAAMhB,gBAAgB,CAACQ,IAAD,CAAtB;UAAA;QAJI,CAAD,CAFpB,gBASI,oBAAC,qBAAD,qBACI,oBAAC,UAAD;UAAM,SAAS,EAAES,sBAAjB;UAAiC,IAAI,eAAE,oBAAC,+BAAD;QAAvC,EADJ,CATJ,eAYI,oBAAC,kBAAD,QACKhB,UAAU,CAACT,OAAX,IAAsB,mBAD3B,CAZJ,eAeI,oBAAC,kBAAD,
|
|
1
|
+
{"version":3,"names":["SearchBarDropdown","props","context","downshift","current","plugins","state","selectItem","setHighlightedIndex","list","indexOf","openMenu","submitSearchTerm","searchTerm","getMenuProps","getItemProps","selectedItem","highlightedIndex","searchBarDropdown","map","item","index","itemClassNames","highlighted","selected","route","className","classnames","onClick","iconSearchType","label","React","Component"],"sources":["SearchBarDropdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { AdminGlobalSearchPlugin } from \"~/types\";\nimport classnames from \"classnames\";\nimport { List, ListItem, ListItemGraphic, ListItemText, ListItemMeta } from \"@webiny/ui/List\";\nimport { searchBarDropdown, iconSearchType } from \"./styled\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Actions as DownshiftActions, DownshiftState, PropGetters } from \"downshift\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { SearchBarState } from \"~/plugins/globalSearch/SearchBar\";\n\ninterface SearchBarDropdownPropsContextDownshiftCurrent\n extends DownshiftActions<any>,\n PropGetters<any> {\n state: DownshiftState<any>;\n}\ninterface SearchBarDropdownPropsContextDownshift {\n current: SearchBarDropdownPropsContextDownshiftCurrent;\n}\ninterface SearchBarDropdownPropsContext {\n downshift: SearchBarDropdownPropsContextDownshift;\n submitSearchTerm: (item: AdminGlobalSearchPlugin) => void;\n state: SearchBarState;\n}\ninterface SearchBarDropdownProps {\n context: SearchBarDropdownPropsContext;\n}\nexport default class SearchBarDropdown extends React.Component<SearchBarDropdownProps> {\n public override componentDidMount() {\n const {\n context: {\n downshift: { current: downshift },\n state: { plugins }\n }\n } = this.props;\n\n downshift.selectItem(plugins.current);\n downshift.setHighlightedIndex(\n plugins.list.indexOf(plugins.current as AdminGlobalSearchPlugin)\n );\n downshift.openMenu();\n }\n\n public override render() {\n const {\n context: {\n downshift: { current: downshift },\n submitSearchTerm,\n state: { plugins, searchTerm }\n }\n } = this.props;\n\n const {\n getMenuProps,\n getItemProps,\n state: { selectedItem, highlightedIndex }\n } = downshift;\n\n return (\n <Elevation z={2} className={searchBarDropdown}>\n <List {...getMenuProps()}>\n {plugins.list.map((item: AdminGlobalSearchPlugin, index) => {\n // Base classes.\n const itemClassNames = {\n highlighted: highlightedIndex === index,\n selected: false\n };\n\n // Add \"selected\" class if the item is selected.\n if (selectedItem && selectedItem === item) {\n itemClassNames.selected = true;\n }\n\n return (\n <ListItem\n key={item.route}\n {...getItemProps({\n index,\n item,\n className: classnames(itemClassNames),\n onClick: () => submitSearchTerm(item)\n })}\n >\n <ListItemGraphic>\n <Icon className={iconSearchType} icon={<SearchIcon />} />\n </ListItemGraphic>\n <ListItemText>\n {searchTerm.current || \"Search for all...\"}\n </ListItemText>\n <ListItemMeta>in {item.label}</ListItemMeta>\n </ListItem>\n );\n })}\n </List>\n </Elevation>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;IAmBqBA,iB;;;;;;;;;;;;WACjB,6BAAoC;MAChC,0BAKI,KAAKC,KALT,CACIC,OADJ;MAAA,IAE8BC,SAF9B,uBAEQA,SAFR,CAEqBC,OAFrB;MAAA,IAGiBC,OAHjB,uBAGQC,KAHR,CAGiBD,OAHjB;MAOAF,SAAS,CAACI,UAAV,CAAqBF,OAAO,CAACD,OAA7B;MACAD,SAAS,CAACK,mBAAV,CACIH,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAqBL,OAAO,CAACD,OAA7B,CADJ;MAGAD,SAAS,CAACQ,QAAV;IACH;;;WAED,kBAAyB;MACrB,2BAMI,KAAKV,KANT,CACIC,OADJ;MAAA,IAE8BC,SAF9B,wBAEQA,SAFR,CAEqBC,OAFrB;MAAA,IAGQQ,gBAHR,wBAGQA,gBAHR;MAAA,iDAIQN,KAJR;MAAA,IAIiBD,OAJjB,yBAIiBA,OAJjB;MAAA,IAI0BQ,UAJ1B,yBAI0BA,UAJ1B;MAQA,IACIC,YADJ,GAIIX,SAJJ,CACIW,YADJ;MAAA,IAEIC,YAFJ,GAIIZ,SAJJ,CAEIY,YAFJ;MAAA,uBAIIZ,SAJJ,CAGIG,KAHJ;MAAA,IAGaU,YAHb,oBAGaA,YAHb;MAAA,IAG2BC,gBAH3B,oBAG2BA,gBAH3B;MAMA,oBACI,oBAAC,oBAAD;QAAW,CAAC,EAAE,CAAd;QAAiB,SAAS,EAAEC;MAA5B,gBACI,oBAAC,UAAD,EAAUJ,YAAY,EAAtB,EACKT,OAAO,CAACI,IAAR,CAAaU,GAAb,CAAiB,UAACC,IAAD,EAAgCC,KAAhC,EAA0C;QACxD;QACA,IAAMC,cAAc,GAAG;UACnBC,WAAW,EAAEN,gBAAgB,KAAKI,KADf;UAEnBG,QAAQ,EAAE;QAFS,CAAvB,CAFwD,CAOxD;;QACA,IAAIR,YAAY,IAAIA,YAAY,KAAKI,IAArC,EAA2C;UACvCE,cAAc,CAACE,QAAf,GAA0B,IAA1B;QACH;;QAED,oBACI,oBAAC,cAAD;UACI,GAAG,EAAEJ,IAAI,CAACK;QADd,GAEQV,YAAY,CAAC;UACbM,KAAK,EAALA,KADa;UAEbD,IAAI,EAAJA,IAFa;UAGbM,SAAS,EAAE,IAAAC,mBAAA,EAAWL,cAAX,CAHE;UAIbM,OAAO,EAAE;YAAA,OAAMhB,gBAAgB,CAACQ,IAAD,CAAtB;UAAA;QAJI,CAAD,CAFpB,gBASI,oBAAC,qBAAD,qBACI,oBAAC,UAAD;UAAM,SAAS,EAAES,sBAAjB;UAAiC,IAAI,eAAE,oBAAC,+BAAD;QAAvC,EADJ,CATJ,eAYI,oBAAC,kBAAD,QACKhB,UAAU,CAACT,OAAX,IAAsB,mBAD3B,CAZJ,eAeI,oBAAC,kBAAD,QAAc,KAAd,EAAkBgB,IAAI,CAACU,KAAvB,CAfJ,CADJ;MAmBH,CA/BA,CADL,CADJ,CADJ;IAsCH;;;EArE0CC,KAAK,CAACC,S"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EmptyStateElementRenderer","props","accept","fileManagerElement","getAccept","acceptsOnlyImages","every","el","startsWith","renderImageProps","width","height","value","showFileManager","onChange","src","split","pop","UIRenderer"],"sources":["EmptyStateElementRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { EmptyStateElement } from \"./EmptyStateElement\";\nimport { UIRenderer, UIRenderParams } from \"~/ui/UIRenderer\";\nimport * as Ui from \"@webiny/ui/ImageUpload\";\nimport { Image } from \"@webiny/app/components\";\nimport { FileManagerElementRenderProps } from \"~/ui/elements/form/FileManagerElement/FileManagerElementRenderer\";\nimport { AddImageIconWrapper, AddImageWrapper, FilePreviewWrapper, RemoveImage } from \"./styled\";\nimport { ReactComponent as AddFileIcon } from \"~/assets/icons/attach_file_black_24dp.svg\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as RemoveImageIcon } from \"@webiny/ui/ImageUpload/icons/round-close-24px.svg\";\n\nexport class EmptyStateElementRenderer extends UIRenderer<\n EmptyStateElement,\n FileManagerElementRenderProps\n> {\n public override render({\n props\n }: UIRenderParams<EmptyStateElement, FileManagerElementRenderProps>): React.ReactNode {\n const accept = props.fileManagerElement.getAccept();\n const acceptsOnlyImages = !accept || accept.every(el => el.startsWith(\"image/\"));\n\n if (acceptsOnlyImages) {\n return (\n <Ui.Image\n placeholder={\"Select an image\"}\n renderImagePreview={renderImageProps => <Image {...renderImageProps} />}\n style={{ width: \"100%\", height: \"auto\" }}\n value={props.value}\n uploadImage={props.showFileManager}\n removeImage={props.onChange}\n />\n );\n }\n\n if (props.value) {\n return (\n <FilePreviewWrapper>\n <span>\n Attached file: <strong>{props.value.src.split(\"/\").pop()}</strong>\n </span>\n\n <RemoveImage onClick={() => props.onChange(null)}>\n <RemoveImageIcon />\n </RemoveImage>\n\n <AddImageWrapper data-role={\"select-file\"} onClick={props.showFileManager}>\n <AddImageIconWrapper>\n <AddFileIcon />\n <Typography use={\"caption\"}>Select a file</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n </FilePreviewWrapper>\n );\n }\n\n return (\n <AddImageWrapper data-role={\"select-file\"} onClick={props.showFileManager}>\n <AddImageIconWrapper>\n <AddFileIcon />\n <Typography use={\"caption\"}>Select a file</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;IAEaA,yB;;;;;;;;;;;;WAIT,sBAEsF;MAAA,IADlFC,KACkF,QADlFA,KACkF;MAClF,IAAMC,MAAM,GAAGD,KAAK,CAACE,kBAAN,CAAyBC,SAAzB,EAAf;MACA,IAAMC,iBAAiB,GAAG,CAACH,MAAD,IAAWA,MAAM,CAACI,KAAP,CAAa,UAAAC,EAAE;QAAA,OAAIA,EAAE,CAACC,UAAH,CAAc,QAAd,CAAJ;MAAA,CAAf,CAArC;;MAEA,IAAIH,iBAAJ,EAAuB;QACnB,oBACI,6BAAC,EAAD,CAAI,KAAJ;UACI,WAAW,EAAE,iBADjB;UAEI,kBAAkB,EAAE,4BAAAI,gBAAgB;YAAA,oBAAI,6BAAC,iBAAD,EAAWA,gBAAX,CAAJ;UAAA,CAFxC;UAGI,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAT;YAAiBC,MAAM,EAAE;UAAzB,CAHX;UAII,KAAK,EAAEV,KAAK,CAACW,KAJjB;UAKI,WAAW,EAAEX,KAAK,CAACY,eALvB;UAMI,WAAW,EAAEZ,KAAK,CAACa;QANvB,EADJ;MAUH;;MAED,IAAIb,KAAK,CAACW,KAAV,EAAiB;QACb,oBACI,6BAAC,0BAAD,qBACI,
|
|
1
|
+
{"version":3,"names":["EmptyStateElementRenderer","props","accept","fileManagerElement","getAccept","acceptsOnlyImages","every","el","startsWith","renderImageProps","width","height","value","showFileManager","onChange","src","split","pop","UIRenderer"],"sources":["EmptyStateElementRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { EmptyStateElement } from \"./EmptyStateElement\";\nimport { UIRenderer, UIRenderParams } from \"~/ui/UIRenderer\";\nimport * as Ui from \"@webiny/ui/ImageUpload\";\nimport { Image } from \"@webiny/app/components\";\nimport { FileManagerElementRenderProps } from \"~/ui/elements/form/FileManagerElement/FileManagerElementRenderer\";\nimport { AddImageIconWrapper, AddImageWrapper, FilePreviewWrapper, RemoveImage } from \"./styled\";\nimport { ReactComponent as AddFileIcon } from \"~/assets/icons/attach_file_black_24dp.svg\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as RemoveImageIcon } from \"@webiny/ui/ImageUpload/icons/round-close-24px.svg\";\n\nexport class EmptyStateElementRenderer extends UIRenderer<\n EmptyStateElement,\n FileManagerElementRenderProps\n> {\n public override render({\n props\n }: UIRenderParams<EmptyStateElement, FileManagerElementRenderProps>): React.ReactNode {\n const accept = props.fileManagerElement.getAccept();\n const acceptsOnlyImages = !accept || accept.every(el => el.startsWith(\"image/\"));\n\n if (acceptsOnlyImages) {\n return (\n <Ui.Image\n placeholder={\"Select an image\"}\n renderImagePreview={renderImageProps => <Image {...renderImageProps} />}\n style={{ width: \"100%\", height: \"auto\" }}\n value={props.value}\n uploadImage={props.showFileManager}\n removeImage={props.onChange}\n />\n );\n }\n\n if (props.value) {\n return (\n <FilePreviewWrapper>\n <span>\n Attached file: <strong>{props.value.src.split(\"/\").pop()}</strong>\n </span>\n\n <RemoveImage onClick={() => props.onChange(null)}>\n <RemoveImageIcon />\n </RemoveImage>\n\n <AddImageWrapper data-role={\"select-file\"} onClick={props.showFileManager}>\n <AddImageIconWrapper>\n <AddFileIcon />\n <Typography use={\"caption\"}>Select a file</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n </FilePreviewWrapper>\n );\n }\n\n return (\n <AddImageWrapper data-role={\"select-file\"} onClick={props.showFileManager}>\n <AddImageIconWrapper>\n <AddFileIcon />\n <Typography use={\"caption\"}>Select a file</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;IAEaA,yB;;;;;;;;;;;;WAIT,sBAEsF;MAAA,IADlFC,KACkF,QADlFA,KACkF;MAClF,IAAMC,MAAM,GAAGD,KAAK,CAACE,kBAAN,CAAyBC,SAAzB,EAAf;MACA,IAAMC,iBAAiB,GAAG,CAACH,MAAD,IAAWA,MAAM,CAACI,KAAP,CAAa,UAAAC,EAAE;QAAA,OAAIA,EAAE,CAACC,UAAH,CAAc,QAAd,CAAJ;MAAA,CAAf,CAArC;;MAEA,IAAIH,iBAAJ,EAAuB;QACnB,oBACI,6BAAC,EAAD,CAAI,KAAJ;UACI,WAAW,EAAE,iBADjB;UAEI,kBAAkB,EAAE,4BAAAI,gBAAgB;YAAA,oBAAI,6BAAC,iBAAD,EAAWA,gBAAX,CAAJ;UAAA,CAFxC;UAGI,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAT;YAAiBC,MAAM,EAAE;UAAzB,CAHX;UAII,KAAK,EAAEV,KAAK,CAACW,KAJjB;UAKI,WAAW,EAAEX,KAAK,CAACY,eALvB;UAMI,WAAW,EAAEZ,KAAK,CAACa;QANvB,EADJ;MAUH;;MAED,IAAIb,KAAK,CAACW,KAAV,EAAiB;QACb,oBACI,6BAAC,0BAAD,qBACI,2CAAM,iBAAN,eACmB,6CAASX,KAAK,CAACW,KAAN,CAAYG,GAAZ,CAAgBC,KAAhB,CAAsB,GAAtB,EAA2BC,GAA3B,EAAT,CADnB,CADJ,eAKI,6BAAC,mBAAD;UAAa,OAAO,EAAE;YAAA,OAAMhB,KAAK,CAACa,QAAN,CAAe,IAAf,CAAN;UAAA;QAAtB,gBACI,6BAAC,8BAAD,OADJ,CALJ,eASI,6BAAC,uBAAD;UAAiB,aAAW,aAA5B;UAA2C,OAAO,EAAEb,KAAK,CAACY;QAA1D,gBACI,6BAAC,2BAAD,qBACI,6BAAC,sCAAD,OADJ,eAEI,6BAAC,sBAAD;UAAY,GAAG,EAAE;QAAjB,GAA4B,eAA5B,CAFJ,CADJ,CATJ,CADJ;MAkBH;;MAED,oBACI,6BAAC,uBAAD;QAAiB,aAAW,aAA5B;QAA2C,OAAO,EAAEZ,KAAK,CAACY;MAA1D,gBACI,6BAAC,2BAAD,qBACI,6BAAC,sCAAD,OADJ,eAEI,6BAAC,sBAAD;QAAY,GAAG,EAAE;MAAjB,GAA4B,eAA5B,CAFJ,CADJ,CADJ;IAQH;;;EApD0CK,uB"}
|