@websolutespa/payload-plugin-bowl 2.0.1 → 3.0.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/CHANGELOG.md +23 -4
- package/README.md +1 -1
- package/dist/blocks/MenuItem.js +219 -0
- package/dist/blocks/MenuItem.js.map +1 -0
- package/dist/blocks/index.js +4 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/withComponentBlock.js +31 -0
- package/dist/blocks/withComponentBlock.js.map +1 -0
- package/dist/bowl.js +331 -0
- package/dist/bowl.js.map +1 -0
- package/dist/collections/Address.js +7 -0
- package/dist/collections/Address.js.map +1 -0
- package/dist/collections/Category.js +94 -0
- package/dist/collections/Category.js.map +1 -0
- package/dist/collections/ConsentPreference.js +34 -0
- package/dist/collections/ConsentPreference.js.map +1 -0
- package/dist/collections/Continent.js +24 -0
- package/dist/collections/Continent.js.map +1 -0
- package/dist/collections/Country.js +66 -0
- package/dist/collections/Country.js.map +1 -0
- package/dist/collections/CountryZone.js +24 -0
- package/dist/collections/CountryZone.js.map +1 -0
- package/dist/collections/EmailConfig.js +84 -0
- package/dist/collections/EmailConfig.js.map +1 -0
- package/dist/collections/EndUsers.js +24 -0
- package/dist/collections/EndUsers.js.map +1 -0
- package/dist/collections/Label.js +26 -0
- package/dist/collections/Label.js.map +1 -0
- package/dist/collections/Language.js +35 -0
- package/dist/collections/Language.js.map +1 -0
- package/dist/collections/LegalNotice.js +29 -0
- package/dist/collections/LegalNotice.js.map +1 -0
- package/dist/collections/Market.js +106 -0
- package/dist/collections/Market.js.map +1 -0
- package/dist/collections/Media.js +40 -0
- package/dist/collections/Media.js.map +1 -0
- package/dist/collections/Menu.js +49 -0
- package/dist/collections/Menu.js.map +1 -0
- package/dist/collections/Municipality.js +68 -0
- package/dist/collections/Municipality.js.map +1 -0
- package/dist/collections/Province.js +59 -0
- package/dist/collections/Province.js.map +1 -0
- package/dist/collections/Redirect.js +90 -0
- package/dist/collections/Redirect.js.map +1 -0
- package/dist/collections/Region.js +45 -0
- package/dist/collections/Region.js.map +1 -0
- package/dist/collections/SubContinent.js +36 -0
- package/dist/collections/SubContinent.js.map +1 -0
- package/dist/collections/Template.js +79 -0
- package/dist/collections/Template.js.map +1 -0
- package/dist/collections/Users.js +11 -0
- package/dist/collections/Users.js.map +1 -0
- package/dist/components/Category/CategoryMenu.js +47 -0
- package/dist/components/Category/CategoryMenu.js.map +1 -0
- package/dist/components/Category/CategoryTree.js +430 -0
- package/dist/components/Category/CategoryTree.js.map +1 -0
- package/dist/components/Category/CategoryTree.scss +330 -0
- package/dist/components/Category/CategoryTreeRoute.js +51 -0
- package/dist/components/Category/CategoryTreeRoute.js.map +1 -0
- package/dist/components/Category/category.service.js +32 -0
- package/dist/components/Category/category.service.js.map +1 -0
- package/dist/components/DataTree/DataTree.js +281 -0
- package/dist/components/DataTree/DataTree.js.map +1 -0
- package/dist/components/DataTree/DataTree.scss +363 -0
- package/dist/components/DataTree/DataTreeProvider.js +67 -0
- package/dist/components/DataTree/DataTreeProvider.js.map +1 -0
- package/dist/components/DataTree/EventEmitter.js +38 -0
- package/dist/components/DataTree/EventEmitter.js.map +1 -0
- package/dist/components/DataTree/useDataTree.js +52 -0
- package/dist/components/DataTree/useDataTree.js.map +1 -0
- package/dist/components/DecoratedList/DecoratedList.js +17 -0
- package/dist/components/DecoratedList/DecoratedList.js.map +1 -0
- package/dist/components/IconServer/IconServer.js +15 -0
- package/dist/components/IconServer/IconServer.js.map +1 -0
- package/dist/components/IconServer/IconServer.scss +14 -0
- package/dist/components/ImportExport/ImportExportList.js +91 -0
- package/dist/components/ImportExport/ImportExportList.js.map +1 -0
- package/dist/components/ImportExport/ImportExportList.scss +70 -0
- package/dist/components/ImportExport/ImportExportRedirect.js +142 -0
- package/dist/components/ImportExport/ImportExportRedirect.js.map +1 -0
- package/dist/components/ImportExport/ImportModal.js +458 -0
- package/dist/components/ImportExport/ImportModal.js.map +1 -0
- package/dist/components/ImportExport/ImportModal.scss +99 -0
- package/dist/components/ImportExport/types.js +3 -0
- package/dist/components/ImportExport/types.js.map +1 -0
- package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js +83 -0
- package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js.map +1 -0
- package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.scss +46 -0
- package/dist/components/LeaveWithoutSaving/usePreventLeave.js +119 -0
- package/dist/components/LeaveWithoutSaving/usePreventLeave.js.map +1 -0
- package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js +15 -0
- package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js.map +1 -0
- package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js +13 -0
- package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js.map +1 -0
- package/dist/components/LogoServer/LogoServer.js +20 -0
- package/dist/components/LogoServer/LogoServer.js.map +1 -0
- package/dist/components/LogoServer/LogoServer.scss +21 -0
- package/dist/core/access/access.js +181 -0
- package/dist/core/access/access.js.map +1 -0
- package/dist/core/access/access.test.js +454 -0
- package/dist/core/access/access.test.js.map +1 -0
- package/dist/core/access/index.js +3 -0
- package/dist/core/access/index.js.map +1 -0
- package/dist/core/api/action.service.js +441 -0
- package/dist/core/api/action.service.js.map +1 -0
- package/dist/core/api/action.service.test.js +218 -0
- package/dist/core/api/action.service.test.js.map +1 -0
- package/dist/core/api/cache.service.js +33 -0
- package/dist/core/api/cache.service.js.map +1 -0
- package/dist/core/api/cache.service.test.js +33 -0
- package/dist/core/api/cache.service.test.js.map +1 -0
- package/dist/core/api/category.service.js +53 -0
- package/dist/core/api/category.service.js.map +1 -0
- package/dist/core/api/collection.service.js +457 -0
- package/dist/core/api/collection.service.js.map +1 -0
- package/dist/core/api/collection.service.test.js +318 -0
- package/dist/core/api/collection.service.test.js.map +1 -0
- package/dist/core/api/email.service.js +84 -0
- package/dist/core/api/email.service.js.map +1 -0
- package/dist/core/api/global.service.js +18 -0
- package/dist/core/api/global.service.js.map +1 -0
- package/dist/core/api/health.service.js +12 -0
- package/dist/core/api/health.service.js.map +1 -0
- package/dist/core/api/index.js +16 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/locale.service.js +58 -0
- package/dist/core/api/locale.service.js.map +1 -0
- package/dist/core/api/locale.service.test.js +46 -0
- package/dist/core/api/locale.service.test.js.map +1 -0
- package/dist/core/api/menu.service.js +81 -0
- package/dist/core/api/menu.service.js.map +1 -0
- package/dist/core/api/menu.service.test.js +300 -0
- package/dist/core/api/menu.service.test.js.map +1 -0
- package/dist/core/api/page.service.js +171 -0
- package/dist/core/api/page.service.js.map +1 -0
- package/dist/core/api/page.service.test.js +68 -0
- package/dist/core/api/page.service.test.js.map +1 -0
- package/dist/core/api/pagination.service.js +29 -0
- package/dist/core/api/pagination.service.js.map +1 -0
- package/dist/core/api/pagination.service.test.js +175 -0
- package/dist/core/api/pagination.service.test.js.map +1 -0
- package/dist/core/api/redirect.service.js +106 -0
- package/dist/core/api/redirect.service.js.map +1 -0
- package/dist/core/api/redirect.service.test.js +106 -0
- package/dist/core/api/redirect.service.test.js.map +1 -0
- package/dist/core/api/route.service.js +451 -0
- package/dist/core/api/route.service.js.map +1 -0
- package/dist/core/api/route.service.test.js +214 -0
- package/dist/core/api/route.service.test.js.map +1 -0
- package/dist/core/api/static.service.js +249 -0
- package/dist/core/api/static.service.js.map +1 -0
- package/dist/core/api/static.service.test.js +240 -0
- package/dist/core/api/static.service.test.js.map +1 -0
- package/dist/core/api/store.service.js +336 -0
- package/dist/core/api/store.service.js.map +1 -0
- package/dist/core/api/store.service.test.js +105 -0
- package/dist/core/api/store.service.test.js.map +1 -0
- package/dist/core/api/types.js +21 -0
- package/dist/core/api/types.js.map +1 -0
- package/dist/core/api/utils.js +83 -0
- package/dist/core/api/utils.js.map +1 -0
- package/dist/core/api/where.service.js +231 -0
- package/dist/core/api/where.service.js.map +1 -0
- package/dist/core/collections/index.js +12 -0
- package/dist/core/collections/index.js.map +1 -0
- package/dist/core/collections/withAction.js +91 -0
- package/dist/core/collections/withAction.js.map +1 -0
- package/dist/core/collections/withAction.test.js +68 -0
- package/dist/core/collections/withAction.test.js.map +1 -0
- package/dist/core/collections/withAddress.js +122 -0
- package/dist/core/collections/withAddress.js.map +1 -0
- package/dist/core/collections/withBlock.js +17 -0
- package/dist/core/collections/withBlock.js.map +1 -0
- package/dist/core/collections/withBlock.test.js +68 -0
- package/dist/core/collections/withBlock.test.js.map +1 -0
- package/dist/core/collections/withCollection.js +61 -0
- package/dist/core/collections/withCollection.js.map +1 -0
- package/dist/core/collections/withCollection.test.js +64 -0
- package/dist/core/collections/withCollection.test.js.map +1 -0
- package/dist/core/collections/withEndUser.js +301 -0
- package/dist/core/collections/withEndUser.js.map +1 -0
- package/dist/core/collections/withGlobal.js +27 -0
- package/dist/core/collections/withGlobal.js.map +1 -0
- package/dist/core/collections/withGlobal.test.js +57 -0
- package/dist/core/collections/withGlobal.test.js.map +1 -0
- package/dist/core/collections/withMenu.js +19 -0
- package/dist/core/collections/withMenu.js.map +1 -0
- package/dist/core/collections/withMenu.test.js +63 -0
- package/dist/core/collections/withMenu.test.js.map +1 -0
- package/dist/core/collections/withPage.js +126 -0
- package/dist/core/collections/withPage.js.map +1 -0
- package/dist/core/collections/withPage.test.js +103 -0
- package/dist/core/collections/withPage.test.js.map +1 -0
- package/dist/core/collections/withStaticCollection.js +60 -0
- package/dist/core/collections/withStaticCollection.js.map +1 -0
- package/dist/core/collections/withStaticCollection.test.js +84 -0
- package/dist/core/collections/withStaticCollection.test.js.map +1 -0
- package/dist/core/collections/withUser.js +56 -0
- package/dist/core/collections/withUser.js.map +1 -0
- package/dist/core/decorators/category.js +28 -0
- package/dist/core/decorators/category.js.map +1 -0
- package/dist/core/decorators/components.js +9 -0
- package/dist/core/decorators/components.js.map +1 -0
- package/dist/core/decorators/href.js +25 -0
- package/dist/core/decorators/href.js.map +1 -0
- package/dist/core/decorators/index.js +11 -0
- package/dist/core/decorators/index.js.map +1 -0
- package/dist/core/decorators/localize.js +27 -0
- package/dist/core/decorators/localize.js.map +1 -0
- package/dist/core/decorators/menu.js +246 -0
- package/dist/core/decorators/menu.js.map +1 -0
- package/dist/core/decorators/nav.js +42 -0
- package/dist/core/decorators/nav.js.map +1 -0
- package/dist/core/decorators/rich-text.js +39 -0
- package/dist/core/decorators/rich-text.js.map +1 -0
- package/dist/core/decorators/schema.js +16 -0
- package/dist/core/decorators/schema.js.map +1 -0
- package/dist/core/decorators/upload.js +44 -0
- package/dist/core/decorators/upload.js.map +1 -0
- package/dist/core/encryption/encryption.js +66 -0
- package/dist/core/encryption/encryption.js.map +1 -0
- package/dist/core/encryption/index.js +3 -0
- package/dist/core/encryption/index.js.map +1 -0
- package/dist/core/fields/index.js +28 -0
- package/dist/core/fields/index.js.map +1 -0
- package/dist/core/fields/withAbstract.js +15 -0
- package/dist/core/fields/withAbstract.js.map +1 -0
- package/dist/core/fields/withAbstract.test.js +72 -0
- package/dist/core/fields/withAbstract.test.js.map +1 -0
- package/dist/core/fields/withAnchor.js +56 -0
- package/dist/core/fields/withAnchor.js.map +1 -0
- package/dist/core/fields/withCategory.js +21 -0
- package/dist/core/fields/withCategory.js.map +1 -0
- package/dist/core/fields/withCategory.test.js +63 -0
- package/dist/core/fields/withCategory.test.js.map +1 -0
- package/dist/core/fields/withCheckbox.js +19 -0
- package/dist/core/fields/withCheckbox.js.map +1 -0
- package/dist/core/fields/withCheckbox.test.js +59 -0
- package/dist/core/fields/withCheckbox.test.js.map +1 -0
- package/dist/core/fields/withComponents.js +17 -0
- package/dist/core/fields/withComponents.js.map +1 -0
- package/dist/core/fields/withComponents.test.js +62 -0
- package/dist/core/fields/withComponents.test.js.map +1 -0
- package/dist/core/fields/withDate.js +18 -0
- package/dist/core/fields/withDate.js.map +1 -0
- package/dist/core/fields/withDate.test.js +56 -0
- package/dist/core/fields/withDate.test.js.map +1 -0
- package/dist/core/fields/withDescription.js +15 -0
- package/dist/core/fields/withDescription.js.map +1 -0
- package/dist/core/fields/withDescription.test.js +72 -0
- package/dist/core/fields/withDescription.test.js.map +1 -0
- package/dist/core/fields/withId.js +19 -0
- package/dist/core/fields/withId.js.map +1 -0
- package/dist/core/fields/withId.test.js +61 -0
- package/dist/core/fields/withId.test.js.map +1 -0
- package/dist/core/fields/withIsActive.js +15 -0
- package/dist/core/fields/withIsActive.js.map +1 -0
- package/dist/core/fields/withIsActive.test.js +59 -0
- package/dist/core/fields/withIsActive.test.js.map +1 -0
- package/dist/core/fields/withIsDefault.js +15 -0
- package/dist/core/fields/withIsDefault.js.map +1 -0
- package/dist/core/fields/withIsDefault.test.js +59 -0
- package/dist/core/fields/withIsDefault.test.js.map +1 -0
- package/dist/core/fields/withLink.js +116 -0
- package/dist/core/fields/withLink.js.map +1 -0
- package/dist/core/fields/withLink.test.js +144 -0
- package/dist/core/fields/withLink.test.js.map +1 -0
- package/dist/core/fields/withMarkets.js +21 -0
- package/dist/core/fields/withMarkets.js.map +1 -0
- package/dist/core/fields/withMarkets.test.js +65 -0
- package/dist/core/fields/withMarkets.test.js.map +1 -0
- package/dist/core/fields/withMedia.js +20 -0
- package/dist/core/fields/withMedia.js.map +1 -0
- package/dist/core/fields/withMedia.test.js +41 -0
- package/dist/core/fields/withMedia.test.js.map +1 -0
- package/dist/core/fields/withMedias.js +25 -0
- package/dist/core/fields/withMedias.js.map +1 -0
- package/dist/core/fields/withMedias.test.js +46 -0
- package/dist/core/fields/withMedias.test.js.map +1 -0
- package/dist/core/fields/withName.js +17 -0
- package/dist/core/fields/withName.js.map +1 -0
- package/dist/core/fields/withName.test.js +59 -0
- package/dist/core/fields/withName.test.js.map +1 -0
- package/dist/core/fields/withNav.js +28 -0
- package/dist/core/fields/withNav.js.map +1 -0
- package/dist/core/fields/withNavs.js +53 -0
- package/dist/core/fields/withNavs.js.map +1 -0
- package/dist/core/fields/withOrder.js +80 -0
- package/dist/core/fields/withOrder.js.map +1 -0
- package/dist/core/fields/withOrder.test.js +56 -0
- package/dist/core/fields/withOrder.test.js.map +1 -0
- package/dist/core/fields/withRelated.js +18 -0
- package/dist/core/fields/withRelated.js.map +1 -0
- package/dist/core/fields/withRelated.test.js +62 -0
- package/dist/core/fields/withRelated.test.js.map +1 -0
- package/dist/core/fields/withRichText.js +68 -0
- package/dist/core/fields/withRichText.js.map +1 -0
- package/dist/core/fields/withRichText.test.js +72 -0
- package/dist/core/fields/withRichText.test.js.map +1 -0
- package/dist/core/fields/withRoles.js +27 -0
- package/dist/core/fields/withRoles.js.map +1 -0
- package/dist/core/fields/withRoles.test.js +49 -0
- package/dist/core/fields/withRoles.test.js.map +1 -0
- package/dist/core/fields/withSelect.js +23 -0
- package/dist/core/fields/withSelect.js.map +1 -0
- package/dist/core/fields/withSelect.test.js +59 -0
- package/dist/core/fields/withSelect.test.js.map +1 -0
- package/dist/core/fields/withSeoWeight.js +19 -0
- package/dist/core/fields/withSeoWeight.js.map +1 -0
- package/dist/core/fields/withSlug.js +33 -0
- package/dist/core/fields/withSlug.js.map +1 -0
- package/dist/core/fields/withSlug.test.js +71 -0
- package/dist/core/fields/withSlug.test.js.map +1 -0
- package/dist/core/fields/withTemplate.js +49 -0
- package/dist/core/fields/withTemplate.js.map +1 -0
- package/dist/core/fields/withTemplate.test.js +93 -0
- package/dist/core/fields/withTemplate.test.js.map +1 -0
- package/dist/core/fields/withTenants.js +21 -0
- package/dist/core/fields/withTenants.js.map +1 -0
- package/dist/core/fields/withTenants.test.js +42 -0
- package/dist/core/fields/withTenants.test.js.map +1 -0
- package/dist/core/fields/withText.js +18 -0
- package/dist/core/fields/withText.js.map +1 -0
- package/dist/core/fields/withText.test.js +56 -0
- package/dist/core/fields/withText.test.js.map +1 -0
- package/dist/core/fields/withTitle.js +17 -0
- package/dist/core/fields/withTitle.js.map +1 -0
- package/dist/core/fields/withTitle.test.js +58 -0
- package/dist/core/fields/withTitle.test.js.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger/index.js +3 -0
- package/dist/core/logger/index.js.map +1 -0
- package/dist/core/logger/logger.js +9 -0
- package/dist/core/logger/logger.js.map +1 -0
- package/dist/core/translations/index.js +3 -0
- package/dist/core/translations/index.js.map +1 -0
- package/dist/core/translations/translations.js +137 -0
- package/dist/core/translations/translations.js.map +1 -0
- package/dist/core/translations/translations.test.js +72 -0
- package/dist/core/translations/translations.test.js.map +1 -0
- package/dist/core/utils/findByIDHandler.js +28 -0
- package/dist/core/utils/findByIDHandler.js.map +1 -0
- package/dist/core/utils/findHandler.js +31 -0
- package/dist/core/utils/findHandler.js.map +1 -0
- package/dist/core/utils/getPreviewURL.js +45 -0
- package/dist/core/utils/getPreviewURL.js.map +1 -0
- package/dist/core/utils/getRequestCollection.js +49 -0
- package/dist/core/utils/getRequestCollection.js.map +1 -0
- package/dist/core/utils/index.js +7 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/core/utils/mergeCollections.js +18 -0
- package/dist/core/utils/mergeCollections.js.map +1 -0
- package/dist/core/utils/mergeFields.js +20 -0
- package/dist/core/utils/mergeFields.js.map +1 -0
- package/dist/core/utils/mergeGlobals.js +17 -0
- package/dist/core/utils/mergeGlobals.js.map +1 -0
- package/dist/core/utils/richText.js +29 -0
- package/dist/core/utils/richText.js.map +1 -0
- package/dist/core/utils/sortByGroup.js +36 -0
- package/dist/core/utils/sortByGroup.js.map +1 -0
- package/dist/debug.js +25 -0
- package/dist/debug.js.map +1 -0
- package/dist/declaration.d.js +3 -0
- package/dist/declaration.d.js.map +1 -0
- package/dist/exports/client.d.ts +36 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +8 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/rsc.d.ts +18 -0
- package/dist/exports/rsc.d.ts.map +1 -0
- package/dist/exports/rsc.js +5 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/fields/color-picker/ColorCell.js +19 -0
- package/dist/fields/color-picker/ColorCell.js.map +1 -0
- package/dist/fields/color-picker/ColorField.js +131 -0
- package/dist/fields/color-picker/ColorField.js.map +1 -0
- package/dist/fields/color-picker/index.js +26 -0
- package/dist/fields/color-picker/index.js.map +1 -0
- package/dist/fields/color-picker/styles.scss +113 -0
- package/dist/fields/color-picker/utils.js +6 -0
- package/dist/fields/color-picker/utils.js.map +1 -0
- package/dist/fields/index.js +3 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/globals/App.js +97 -0
- package/dist/globals/App.js.map +1 -0
- package/dist/globals/Locale.js +82 -0
- package/dist/globals/Locale.js.map +1 -0
- package/dist/globals/LocaleRowLabel.js +16 -0
- package/dist/globals/LocaleRowLabel.js.map +1 -0
- package/dist/index.d.ts +891 -844
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -9263
- package/dist/index.js.map +1 -0
- package/dist/mapper.js +199 -0
- package/dist/mapper.js.map +1 -0
- package/dist/options.js +76 -0
- package/dist/options.js.map +1 -0
- package/dist/test/blocks/blocks.js +13 -0
- package/dist/test/blocks/blocks.js.map +1 -0
- package/dist/test/collections/ActionCollection.js +12 -0
- package/dist/test/collections/ActionCollection.js.map +1 -0
- package/dist/test/collections/AdminCollection.js +18 -0
- package/dist/test/collections/AdminCollection.js.map +1 -0
- package/dist/test/collections/BlockCollection.js +16 -0
- package/dist/test/collections/BlockCollection.js.map +1 -0
- package/dist/test/collections/Collection.js +12 -0
- package/dist/test/collections/Collection.js.map +1 -0
- package/dist/test/collections/FieldCollection.js +84 -0
- package/dist/test/collections/FieldCollection.js.map +1 -0
- package/dist/test/collections/GlobalCollection.js +12 -0
- package/dist/test/collections/GlobalCollection.js.map +1 -0
- package/dist/test/collections/LinkCollection.js +12 -0
- package/dist/test/collections/LinkCollection.js.map +1 -0
- package/dist/test/collections/MenuCollection.js +12 -0
- package/dist/test/collections/MenuCollection.js.map +1 -0
- package/dist/test/collections/PageCollection.js +12 -0
- package/dist/test/collections/PageCollection.js.map +1 -0
- package/dist/test/collections/RoleCollection.js +19 -0
- package/dist/test/collections/RoleCollection.js.map +1 -0
- package/dist/test/collections/RoleFieldCollection.js +40 -0
- package/dist/test/collections/RoleFieldCollection.js.map +1 -0
- package/dist/test/collections/StaticCollection.js +56 -0
- package/dist/test/collections/StaticCollection.js.map +1 -0
- package/dist/test/collections/StorePageCollection.js +12 -0
- package/dist/test/collections/StorePageCollection.js.map +1 -0
- package/dist/test/collections/TenantCollection.js +22 -0
- package/dist/test/collections/TenantCollection.js.map +1 -0
- package/dist/test/collections/TranslationCollection.js +16 -0
- package/dist/test/collections/TranslationCollection.js.map +1 -0
- package/dist/test/collections/TypeACollection.js +18 -0
- package/dist/test/collections/TypeACollection.js.map +1 -0
- package/dist/test/collections/TypeBCollection.js +18 -0
- package/dist/test/collections/TypeBCollection.js.map +1 -0
- package/dist/test/collections/actions/NewsletterAction.js +29 -0
- package/dist/test/collections/actions/NewsletterAction.js.map +1 -0
- package/dist/test/collections/actions/RegisterAction.js +44 -0
- package/dist/test/collections/actions/RegisterAction.js.map +1 -0
- package/dist/test/collections/users/EndUsers.js +40 -0
- package/dist/test/collections/users/EndUsers.js.map +1 -0
- package/dist/test/collections/users/Users.js +20 -0
- package/dist/test/collections/users/Users.js.map +1 -0
- package/dist/test/index.js +32 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/payload.config.js +106 -0
- package/dist/test/payload.config.js.map +1 -0
- package/dist/test/utils.js +52 -0
- package/dist/test/utils.js.map +1 -0
- package/dist/translations.js +467 -0
- package/dist/translations.js.map +1 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/package.json +119 -37
- package/scss/styles.scss +0 -1
- package/dist/index.css +0 -796
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EventEmitter } from './EventEmitter';
|
|
2
|
+
export class DataTreeProvider {
|
|
3
|
+
data;
|
|
4
|
+
onDidChangeTreeDataEmitter = new EventEmitter();
|
|
5
|
+
onSetData;
|
|
6
|
+
constructor(items, onSetData){
|
|
7
|
+
this.data = {
|
|
8
|
+
items: {
|
|
9
|
+
...items
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
this.onSetData = onSetData;
|
|
13
|
+
}
|
|
14
|
+
async getTreeItem(itemId) {
|
|
15
|
+
// console.log('getTreeItem', itemId);
|
|
16
|
+
return this.data.items[itemId];
|
|
17
|
+
}
|
|
18
|
+
async onChangeItemChildren(itemId, children) {
|
|
19
|
+
// console.log('onChangeItemChildren', itemId);
|
|
20
|
+
/*
|
|
21
|
+
const items = { ...this.data.items };
|
|
22
|
+
const item = { ...items[itemId] };
|
|
23
|
+
item.children = [...children];
|
|
24
|
+
items[itemId] = item;
|
|
25
|
+
this.data = { items };
|
|
26
|
+
console.log(this.data);
|
|
27
|
+
*/ this.data.items[itemId].children = children;
|
|
28
|
+
this.onItemsDidChange_(this.data.items);
|
|
29
|
+
this.onDidChangeTreeDataEmitter.emit([
|
|
30
|
+
itemId
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
async onRenameItem(item, name) {
|
|
34
|
+
// console.log('onRenameItem', item, name);
|
|
35
|
+
if (typeof this.onSetData === 'function') {
|
|
36
|
+
/*
|
|
37
|
+
const items = { ...this.data.items };
|
|
38
|
+
const newItem = { ...item };
|
|
39
|
+
items[item.index] = this.onSetData(newItem, {
|
|
40
|
+
...newItem.data,
|
|
41
|
+
title: name
|
|
42
|
+
});
|
|
43
|
+
this.data = { items };
|
|
44
|
+
*/ this.data.items[item.index] = this.onSetData(item, {
|
|
45
|
+
...item.data,
|
|
46
|
+
title: name
|
|
47
|
+
});
|
|
48
|
+
this.onItemsDidChange_(this.data.items);
|
|
49
|
+
// this.onDidChangeTreeDataEmitter.emit(item.index);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
onDidChangeTreeData(callback) {
|
|
53
|
+
// console.log('onDidChangeTreeData', callback);
|
|
54
|
+
const handlerId = this.onDidChangeTreeDataEmitter.on((payload)=>callback(payload));
|
|
55
|
+
return {
|
|
56
|
+
dispose: ()=>this.onDidChangeTreeDataEmitter.off(handlerId)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
onItemsDidChange_(items) {
|
|
60
|
+
console.log('onItemsDidChange_', items);
|
|
61
|
+
}
|
|
62
|
+
onItemsDidChange(callback) {
|
|
63
|
+
this.onItemsDidChange_ = callback;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=DataTreeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DataTree/DataTreeProvider.ts"],"sourcesContent":["import { ReactNode } from 'react';\r\nimport { Disposable, ExplicitDataSource, TreeDataProvider, TreeItem, TreeItemIndex } from 'react-complex-tree';\r\nimport { EventEmitter } from './EventEmitter';\r\n\r\nexport type TreeItemData = {\r\n title: string;\r\n extra?: ReactNode;\r\n};\r\n\r\nexport class DataTreeProvider<T extends TreeItemData> implements TreeDataProvider {\r\n private data: ExplicitDataSource;\r\n private onDidChangeTreeDataEmitter = new EventEmitter<TreeItemIndex[]>();\r\n private onSetData?: (item: TreeItem<T>, data: T) => TreeItem<T>;\r\n\r\n constructor(\r\n items: Record<TreeItemIndex, TreeItem<T>>,\r\n onSetData?: (item: TreeItem<T>, data: T) => TreeItem<T>\r\n ) {\r\n this.data = { items: { ...items } };\r\n this.onSetData = onSetData;\r\n }\r\n\r\n public async getTreeItem(itemId: TreeItemIndex): Promise<TreeItem> {\r\n // console.log('getTreeItem', itemId);\r\n return this.data.items[itemId]!;\r\n }\r\n\r\n public async onChangeItemChildren(\r\n itemId: TreeItemIndex,\r\n children: TreeItemIndex[]\r\n ): Promise<void> {\r\n // console.log('onChangeItemChildren', itemId);\r\n /*\r\n const items = { ...this.data.items };\r\n const item = { ...items[itemId] };\r\n item.children = [...children];\r\n items[itemId] = item;\r\n this.data = { items };\r\n console.log(this.data);\r\n */\r\n this.data.items[itemId]!.children = children;\r\n this.onItemsDidChange_(this.data.items);\r\n this.onDidChangeTreeDataEmitter.emit([itemId]);\r\n }\r\n\r\n public async onRenameItem(item: TreeItem<T>, name: string): Promise<void> {\r\n // console.log('onRenameItem', item, name);\r\n if (typeof this.onSetData === 'function') {\r\n /*\r\n const items = { ...this.data.items };\r\n const newItem = { ...item };\r\n items[item.index] = this.onSetData(newItem, {\r\n ...newItem.data,\r\n title: name\r\n });\r\n this.data = { items };\r\n */\r\n this.data.items[item.index] = this.onSetData(item, {\r\n ...item.data,\r\n title: name,\r\n });\r\n this.onItemsDidChange_(this.data.items);\r\n // this.onDidChangeTreeDataEmitter.emit(item.index);\r\n }\r\n }\r\n\r\n public onDidChangeTreeData(callback: (changedItemIds: TreeItemIndex[]) => void): Disposable {\r\n // console.log('onDidChangeTreeData', callback);\r\n const handlerId = this.onDidChangeTreeDataEmitter.on(payload => callback(payload));\r\n return {\r\n dispose: () => this.onDidChangeTreeDataEmitter.off(handlerId),\r\n };\r\n }\r\n\r\n public onItemsDidChange_(items: Record<TreeItemIndex, TreeItem<T>>): void {\r\n console.log('onItemsDidChange_', items);\r\n }\r\n\r\n public onItemsDidChange(callback: (items: Record<TreeItemIndex, TreeItem<T>>) => void): void {\r\n this.onItemsDidChange_ = callback;\r\n }\r\n}\r\n"],"names":["EventEmitter","DataTreeProvider","data","onDidChangeTreeDataEmitter","onSetData","constructor","items","getTreeItem","itemId","onChangeItemChildren","children","onItemsDidChange_","emit","onRenameItem","item","name","index","title","onDidChangeTreeData","callback","handlerId","on","payload","dispose","off","console","log","onItemsDidChange"],"mappings":"AAEA,SAASA,YAAY,QAAQ,iBAAiB;AAO9C,OAAO,MAAMC;IACHC,KAAyB;IACzBC,6BAA6B,IAAIH,eAAgC;IACjEI,UAAwD;IAEhEC,YACEC,KAAyC,EACzCF,SAAuD,CACvD;QACA,IAAI,CAACF,IAAI,GAAG;YAAEI,OAAO;gBAAE,GAAGA,KAAK;YAAC;QAAE;QAClC,IAAI,CAACF,SAAS,GAAGA;IACnB;IAEA,MAAaG,YAAYC,MAAqB,EAAqB;QACjE,sCAAsC;QACtC,OAAO,IAAI,CAACN,IAAI,CAACI,KAAK,CAACE,OAAO;IAChC;IAEA,MAAaC,qBACXD,MAAqB,EACrBE,QAAyB,EACV;QACf,+CAA+C;QAC/C;;;;;;;IAOA,GACA,IAAI,CAACR,IAAI,CAACI,KAAK,CAACE,OAAO,CAAEE,QAAQ,GAAGA;QACpC,IAAI,CAACC,iBAAiB,CAAC,IAAI,CAACT,IAAI,CAACI,KAAK;QACtC,IAAI,CAACH,0BAA0B,CAACS,IAAI,CAAC;YAACJ;SAAO;IAC/C;IAEA,MAAaK,aAAaC,IAAiB,EAAEC,IAAY,EAAiB;QACxE,2CAA2C;QAC3C,IAAI,OAAO,IAAI,CAACX,SAAS,KAAK,YAAY;YACxC;;;;;;;;MAQA,GACA,IAAI,CAACF,IAAI,CAACI,KAAK,CAACQ,KAAKE,KAAK,CAAC,GAAG,IAAI,CAACZ,SAAS,CAACU,MAAM;gBACjD,GAAGA,KAAKZ,IAAI;gBACZe,OAAOF;YACT;YACA,IAAI,CAACJ,iBAAiB,CAAC,IAAI,CAACT,IAAI,CAACI,KAAK;QACtC,oDAAoD;QACtD;IACF;IAEOY,oBAAoBC,QAAmD,EAAc;QAC1F,gDAAgD;QAChD,MAAMC,YAAY,IAAI,CAACjB,0BAA0B,CAACkB,EAAE,CAACC,CAAAA,UAAWH,SAASG;QACzE,OAAO;YACLC,SAAS,IAAM,IAAI,CAACpB,0BAA0B,CAACqB,GAAG,CAACJ;QACrD;IACF;IAEOT,kBAAkBL,KAAyC,EAAQ;QACxEmB,QAAQC,GAAG,CAAC,qBAAqBpB;IACnC;IAEOqB,iBAAiBR,QAA6D,EAAQ;QAC3F,IAAI,CAACR,iBAAiB,GAAGQ;IAC3B;AACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export class EventEmitter {
|
|
2
|
+
handlerCount = 0;
|
|
3
|
+
handlers = [];
|
|
4
|
+
options;
|
|
5
|
+
constructor(options){
|
|
6
|
+
this.options = options;
|
|
7
|
+
}
|
|
8
|
+
get numberOfHandlers() {
|
|
9
|
+
return this.handlers.filter((h)=>!!h).length;
|
|
10
|
+
}
|
|
11
|
+
async emit(payload) {
|
|
12
|
+
const promises = [];
|
|
13
|
+
this.options?.logger?.('emit', payload);
|
|
14
|
+
for (const handler of this.handlers){
|
|
15
|
+
if (handler) {
|
|
16
|
+
const res = handler(payload);
|
|
17
|
+
if (typeof res?.then === 'function') {
|
|
18
|
+
promises.push(res);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
await Promise.all(promises);
|
|
23
|
+
}
|
|
24
|
+
on(handler) {
|
|
25
|
+
this.options?.logger?.('on');
|
|
26
|
+
this.handlers.push(handler);
|
|
27
|
+
return this.handlerCount++;
|
|
28
|
+
}
|
|
29
|
+
off(handlerId) {
|
|
30
|
+
this.delete(handlerId);
|
|
31
|
+
}
|
|
32
|
+
delete(handlerId) {
|
|
33
|
+
this.options?.logger?.('off');
|
|
34
|
+
this.handlers[handlerId] = null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=EventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DataTree/EventEmitter.ts"],"sourcesContent":["export interface EventEmitterOptions<EventPayload = any> {\r\n logger?: (log: string, payload?: EventPayload) => void;\r\n}\r\n\r\nexport type EventHandler<EventPayload> =\r\n | ((payload: EventPayload) => Promise<void> | void)\r\n | null\r\n | undefined;\r\n\r\nexport class EventEmitter<EventPayload> {\r\n private handlerCount = 0;\r\n\r\n private handlers: Array<EventHandler<EventPayload>> = [];\r\n\r\n private options?: EventEmitterOptions<EventPayload>;\r\n\r\n constructor(options?: EventEmitterOptions<EventPayload>) {\r\n this.options = options;\r\n }\r\n\r\n public get numberOfHandlers() {\r\n return this.handlers.filter(h => !!h).length;\r\n }\r\n\r\n public async emit(payload: EventPayload): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n this.options?.logger?.('emit', payload);\r\n\r\n for (const handler of this.handlers) {\r\n if (handler) {\r\n const res = handler(payload) as Promise<void>;\r\n if (typeof res?.then === 'function') {\r\n promises.push(res);\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n public on(handler: EventHandler<EventPayload>): number {\r\n this.options?.logger?.('on');\r\n this.handlers.push(handler);\r\n\r\n return this.handlerCount++;\r\n }\r\n\r\n public off(handlerId: number) {\r\n this.delete(handlerId);\r\n }\r\n\r\n public delete(handlerId: number) {\r\n this.options?.logger?.('off');\r\n this.handlers[handlerId] = null;\r\n }\r\n}\r\n"],"names":["EventEmitter","handlerCount","handlers","options","constructor","numberOfHandlers","filter","h","length","emit","payload","promises","logger","handler","res","then","push","Promise","all","on","off","handlerId","delete"],"mappings":"AASA,OAAO,MAAMA;IACHC,eAAe,EAAE;IAEjBC,WAA8C,EAAE,CAAC;IAEjDC,QAA4C;IAEpDC,YAAYD,OAA2C,CAAE;QACvD,IAAI,CAACA,OAAO,GAAGA;IACjB;IAEA,IAAWE,mBAAmB;QAC5B,OAAO,IAAI,CAACH,QAAQ,CAACI,MAAM,CAACC,CAAAA,IAAK,CAAC,CAACA,GAAGC,MAAM;IAC9C;IAEA,MAAaC,KAAKC,OAAqB,EAAiB;QACtD,MAAMC,WAAiC,EAAE;QAEzC,IAAI,CAACR,OAAO,EAAES,SAAS,QAAQF;QAE/B,KAAK,MAAMG,WAAW,IAAI,CAACX,QAAQ,CAAE;YACnC,IAAIW,SAAS;gBACX,MAAMC,MAAMD,QAAQH;gBACpB,IAAI,OAAOI,KAAKC,SAAS,YAAY;oBACnCJ,SAASK,IAAI,CAACF;gBAChB;YACF;QACF;QAEA,MAAMG,QAAQC,GAAG,CAACP;IACpB;IAEOQ,GAAGN,OAAmC,EAAU;QACrD,IAAI,CAACV,OAAO,EAAES,SAAS;QACvB,IAAI,CAACV,QAAQ,CAACc,IAAI,CAACH;QAEnB,OAAO,IAAI,CAACZ,YAAY;IAC1B;IAEOmB,IAAIC,SAAiB,EAAE;QAC5B,IAAI,CAACC,MAAM,CAACD;IACd;IAEOC,OAAOD,SAAiB,EAAE;QAC/B,IAAI,CAAClB,OAAO,EAAES,SAAS;QACvB,IAAI,CAACV,QAAQ,CAACmB,UAAU,GAAG;IAC7B;AACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
export function useDataTree(items) {
|
|
3
|
+
const [data, setData] = useState({
|
|
4
|
+
items
|
|
5
|
+
});
|
|
6
|
+
return {
|
|
7
|
+
getTreeItem: async (itemId)=>{
|
|
8
|
+
console.log('getTreeItem', itemId);
|
|
9
|
+
return data.items[itemId];
|
|
10
|
+
},
|
|
11
|
+
onChangeItemChildren: async (itemId, children)=>{
|
|
12
|
+
console.log('onChangeItemChildren', itemId);
|
|
13
|
+
const items = {
|
|
14
|
+
...data.items
|
|
15
|
+
};
|
|
16
|
+
const item = {
|
|
17
|
+
...items[itemId]
|
|
18
|
+
};
|
|
19
|
+
item.children = children;
|
|
20
|
+
items[itemId] = item;
|
|
21
|
+
setData({
|
|
22
|
+
items
|
|
23
|
+
});
|
|
24
|
+
// this.data.items[itemId].children = children;
|
|
25
|
+
// this.onItemsDidChange_(items);
|
|
26
|
+
// this.onDidChangeTreeDataEmitter.emit([itemId]);
|
|
27
|
+
},
|
|
28
|
+
onRenameItem: async (item, name)=>{
|
|
29
|
+
console.log('onRenameItem', item, name);
|
|
30
|
+
const items = {
|
|
31
|
+
...data.items
|
|
32
|
+
};
|
|
33
|
+
const newItem = {
|
|
34
|
+
...item
|
|
35
|
+
};
|
|
36
|
+
newItem.data = name;
|
|
37
|
+
items[item.index] = newItem;
|
|
38
|
+
setData({
|
|
39
|
+
items
|
|
40
|
+
});
|
|
41
|
+
// this.data.items[item.index] = this.setItemName(item, name);
|
|
42
|
+
// this.onItemsDidChange_(items);
|
|
43
|
+
// this.onDidChangeTreeDataEmitter.emit(item.index);
|
|
44
|
+
},
|
|
45
|
+
onDidChangeTreeData: (listener)=>{
|
|
46
|
+
console.log('onDidChangeTreeData', listener);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=useDataTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DataTree/useDataTree.ts"],"sourcesContent":["import { useState } from 'react';\r\nimport { TreeDataProvider, TreeItem, TreeItemIndex } from 'react-complex-tree';\r\n\r\nexport function useDataTree<T = any>(items: Record<TreeItemIndex, TreeItem<T>>): TreeDataProvider {\r\n\r\n const [data, setData] = useState({ items });\r\n\r\n return {\r\n getTreeItem: async (itemId: TreeItemIndex): Promise<TreeItem<T>> => {\r\n console.log('getTreeItem', itemId);\r\n return data.items[itemId]!;\r\n },\r\n onChangeItemChildren: async (itemId: TreeItemIndex, children: TreeItemIndex[]): Promise<void> => {\r\n console.log('onChangeItemChildren', itemId);\r\n const items = { ...data.items };\r\n const item = { ...items[itemId]! };\r\n item.children = children;\r\n items[itemId] = item;\r\n setData({ items });\r\n // this.data.items[itemId].children = children;\r\n // this.onItemsDidChange_(items);\r\n // this.onDidChangeTreeDataEmitter.emit([itemId]);\r\n },\r\n onRenameItem: async (item: TreeItem<T>, name: string): Promise<void> => {\r\n console.log('onRenameItem', item, name);\r\n const items = { ...data.items };\r\n const newItem = { ...item };\r\n newItem.data = name as T;\r\n items[item.index] = newItem;\r\n setData({ items });\r\n // this.data.items[item.index] = this.setItemName(item, name);\r\n // this.onItemsDidChange_(items);\r\n // this.onDidChangeTreeDataEmitter.emit(item.index);\r\n },\r\n onDidChangeTreeData: (listener: (changedItemIds: TreeItemIndex[]) => void) => {\r\n console.log('onDidChangeTreeData', listener);\r\n return null as any;\r\n },\r\n };\r\n}\r\n"],"names":["useState","useDataTree","items","data","setData","getTreeItem","itemId","console","log","onChangeItemChildren","children","item","onRenameItem","name","newItem","index","onDidChangeTreeData","listener"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,QAAQ;AAGjC,OAAO,SAASC,YAAqBC,KAAyC;IAE5E,MAAM,CAACC,MAAMC,QAAQ,GAAGJ,SAAS;QAAEE;IAAM;IAEzC,OAAO;QACLG,aAAa,OAAOC;YAClBC,QAAQC,GAAG,CAAC,eAAeF;YAC3B,OAAOH,KAAKD,KAAK,CAACI,OAAO;QAC3B;QACAG,sBAAsB,OAAOH,QAAuBI;YAClDH,QAAQC,GAAG,CAAC,wBAAwBF;YACpC,MAAMJ,QAAQ;gBAAE,GAAGC,KAAKD,KAAK;YAAC;YAC9B,MAAMS,OAAO;gBAAE,GAAGT,KAAK,CAACI,OAAO;YAAE;YACjCK,KAAKD,QAAQ,GAAGA;YAChBR,KAAK,CAACI,OAAO,GAAGK;YAChBP,QAAQ;gBAAEF;YAAM;QAChB,+CAA+C;QAC/C,iCAAiC;QACjC,kDAAkD;QACpD;QACAU,cAAc,OAAOD,MAAmBE;YACtCN,QAAQC,GAAG,CAAC,gBAAgBG,MAAME;YAClC,MAAMX,QAAQ;gBAAE,GAAGC,KAAKD,KAAK;YAAC;YAC9B,MAAMY,UAAU;gBAAE,GAAGH,IAAI;YAAC;YAC1BG,QAAQX,IAAI,GAAGU;YACfX,KAAK,CAACS,KAAKI,KAAK,CAAC,GAAGD;YACpBV,QAAQ;gBAAEF;YAAM;QAChB,8DAA8D;QAC9D,iCAAiC;QACjC,oDAAoD;QACtD;QACAc,qBAAqB,CAACC;YACpBV,QAAQC,GAAG,CAAC,uBAAuBS;YACnC,OAAO;QACT;IACF;AACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { DefaultListView } from '@payloadcms/ui';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
export const DecoratedList = ({ props, before, after })=>{
|
|
6
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
7
|
+
children: [
|
|
8
|
+
before && before,
|
|
9
|
+
/*#__PURE__*/ _jsx(DefaultListView, {
|
|
10
|
+
...props
|
|
11
|
+
}),
|
|
12
|
+
after && after
|
|
13
|
+
]
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=DecoratedList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DecoratedList/DecoratedList.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { DefaultListView } from '@payloadcms/ui';\r\nimport type { ListViewClientProps } from 'payload';\r\nimport React, { ReactNode } from 'react';\r\n\r\nexport type DecoratedListProps = {\r\n props: ListViewClientProps,\r\n before?: ReactNode,\r\n after?: ReactNode,\r\n};\r\n\r\nexport const DecoratedList: React.FC<DecoratedListProps> = ({ props, before, after }) => {\r\n return (\r\n <>\r\n {before && before}\r\n <DefaultListView {...props} />\r\n {after && after}\r\n </>\r\n );\r\n};\r\n"],"names":["DefaultListView","React","DecoratedList","props","before","after"],"mappings":"AAAA;;AAEA,SAASA,eAAe,QAAQ,iBAAiB;AAEjD,OAAOC,WAA0B,QAAQ;AAQzC,OAAO,MAAMC,gBAA8C,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAClF,qBACE;;YACGD,UAAUA;0BACX,KAACJ;gBAAiB,GAAGG,KAAK;;YACzBE,SAASA;;;AAGhB,EAAE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { LOGO } from '../LogoServer/LogoServer';
|
|
4
|
+
import './IconServer.scss';
|
|
5
|
+
export const IconServer = ()=>{
|
|
6
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
7
|
+
className: "icon",
|
|
8
|
+
children: /*#__PURE__*/ _jsx("img", {
|
|
9
|
+
src: LOGO,
|
|
10
|
+
alt: "Bowl Logo"
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=IconServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/IconServer/IconServer.tsx"],"sourcesContent":["import React from 'react';\r\nimport { LOGO } from '../LogoServer/LogoServer';\r\nimport './IconServer.scss';\r\n\r\nexport const IconServer: React.FC = () => {\r\n return (\r\n <div className=\"icon\">\r\n <img src={LOGO} alt=\"Bowl Logo\" />\r\n </div>\r\n );\r\n};\r\n"],"names":["React","LOGO","IconServer","div","className","img","src","alt"],"mappings":";AAAA,OAAOA,WAAW,QAAQ;AAC1B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,OAAO,oBAAoB;AAE3B,OAAO,MAAMC,aAAuB;IAClC,qBACE,KAACC;QAAIC,WAAU;kBACb,cAAA,KAACC;YAAIC,KAAKL;YAAMM,KAAI;;;AAG1B,EAAE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Modal, useConfig, useModal, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { getRouteResolver } from '@websolutespa/payload-utils';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { DecoratedList } from '../DecoratedList/DecoratedList';
|
|
7
|
+
import './ImportExportList.scss';
|
|
8
|
+
import { ImportModal } from './ImportModal';
|
|
9
|
+
const baseClass = 'import-export-list';
|
|
10
|
+
export const ImportExportList = ({ parser, exampleCSV = '', ...props })=>{
|
|
11
|
+
// !!! check translations
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const slug = props.collectionSlug;
|
|
14
|
+
const { config } = useConfig();
|
|
15
|
+
const routeResolver = getRouteResolver(config);
|
|
16
|
+
const exportUrl = routeResolver.api(`/${slug}/export`);
|
|
17
|
+
const { openModal, isModalOpen } = useModal();
|
|
18
|
+
const modalKey = `${slug}-import-modal`;
|
|
19
|
+
const isModalOpened = isModalOpen(modalKey);
|
|
20
|
+
const downloadExampleCSV = ()=>{
|
|
21
|
+
const element = document.createElement('a');
|
|
22
|
+
element.style.position = 'absolute';
|
|
23
|
+
const file = new Blob([
|
|
24
|
+
exampleCSV
|
|
25
|
+
], {
|
|
26
|
+
type: 'text/plain'
|
|
27
|
+
});
|
|
28
|
+
element.href = URL.createObjectURL(file);
|
|
29
|
+
element.download = 'example.csv';
|
|
30
|
+
document.body.appendChild(element); // Required for this to work in FireFox
|
|
31
|
+
element.click();
|
|
32
|
+
element.remove();
|
|
33
|
+
};
|
|
34
|
+
return /*#__PURE__*/ _jsx(DecoratedList, {
|
|
35
|
+
props: props,
|
|
36
|
+
after: /*#__PURE__*/ _jsxs(_Fragment, {
|
|
37
|
+
children: [
|
|
38
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
39
|
+
className: "gutter--left gutter--right import-export-list__actions",
|
|
40
|
+
children: [
|
|
41
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
42
|
+
className: "pill pill--style-light pill--has-link pill--has-action",
|
|
43
|
+
onClick: ()=>openModal(modalKey),
|
|
44
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
45
|
+
children: t('importExport:importCSV')
|
|
46
|
+
})
|
|
47
|
+
}),
|
|
48
|
+
/*#__PURE__*/ _jsx("a", {
|
|
49
|
+
className: "pill pill--style-light pill--has-link pill--has-action",
|
|
50
|
+
href: exportUrl,
|
|
51
|
+
download: `${slug}.csv`,
|
|
52
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
53
|
+
children: t('importExport:exportCSV')
|
|
54
|
+
})
|
|
55
|
+
}),
|
|
56
|
+
exampleCSV && /*#__PURE__*/ _jsx(Button, {
|
|
57
|
+
className: "pill pill--style-light pill--has-link pill--has-action",
|
|
58
|
+
onClick: ()=>downloadExampleCSV(),
|
|
59
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
60
|
+
children: t('importExport:exampleCSV')
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
]
|
|
64
|
+
}),
|
|
65
|
+
/*#__PURE__*/ _jsx(Modal, {
|
|
66
|
+
slug: modalKey,
|
|
67
|
+
className: `${baseClass}__modal`,
|
|
68
|
+
children: isModalOpened && /*#__PURE__*/ _jsx(ImportModal, {
|
|
69
|
+
parser: parser,
|
|
70
|
+
slug: props.collectionSlug
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
export function importExportListWithParser(parser, exampleCSV) {
|
|
78
|
+
// console.log('importExportListWithParser', 'parser', parser);
|
|
79
|
+
const WithParserImportExportList = ({ ...props })=>{
|
|
80
|
+
return /*#__PURE__*/ _jsx(ImportExportList, {
|
|
81
|
+
parser: parser,
|
|
82
|
+
exampleCSV: exampleCSV,
|
|
83
|
+
...props
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
// WithParserImportExportList.displayName = `WithParserImportExportList(${getDisplayName(WrappedComponent)})`;
|
|
87
|
+
WithParserImportExportList.displayName = 'WithParserImportExportList(ImportExportList)';
|
|
88
|
+
return WithParserImportExportList;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=ImportExportList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ImportExport/ImportExportList.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Button, Modal, useConfig, useModal, useTranslation } from '@payloadcms/ui';\r\nimport { getRouteResolver } from '@websolutespa/payload-utils';\r\nimport type { ListViewClientProps } from 'payload';\r\nimport React from 'react';\r\nimport { DecoratedList } from '../DecoratedList/DecoratedList';\r\nimport './ImportExportList.scss';\r\nimport { ImportModal } from './ImportModal';\r\nimport { IImportItem } from './types';\r\n\r\nconst baseClass = 'import-export-list';\r\n\r\nexport type ImportExportListProps<T = any> = ListViewClientProps & {\r\n parser?: (items: IImportItem[]) => T[];\r\n exampleCSV?: string;\r\n};\r\n\r\nexport const ImportExportList: React.FC<ImportExportListProps> = ({\r\n parser,\r\n exampleCSV = '',\r\n ...props\r\n}) => {\r\n // !!! check translations\r\n const { t } = useTranslation<any, any>();\r\n\r\n const slug = props.collectionSlug;\r\n\r\n const { config } = useConfig();\r\n const routeResolver = getRouteResolver(config);\r\n\r\n const exportUrl = routeResolver.api(`/${slug}/export`);\r\n\r\n const { openModal, isModalOpen } = useModal();\r\n const modalKey = `${slug}-import-modal`;\r\n const isModalOpened = isModalOpen(modalKey);\r\n\r\n const downloadExampleCSV = () => {\r\n const element = document.createElement('a');\r\n element.style.position = 'absolute';\r\n const file = new Blob([exampleCSV], {type: 'text/plain'});\r\n element.href = URL.createObjectURL(file);\r\n element.download = 'example.csv';\r\n document.body.appendChild(element); // Required for this to work in FireFox\r\n element.click();\r\n element.remove();\r\n };\r\n\r\n return (\r\n <DecoratedList props={props}\r\n after={(\r\n <>\r\n {(\r\n <div className=\"gutter--left gutter--right import-export-list__actions\">\r\n <Button className=\"pill pill--style-light pill--has-link pill--has-action\" onClick={() => openModal(modalKey)}>\r\n <span>{t('importExport:importCSV')}</span>\r\n </Button>\r\n <a className=\"pill pill--style-light pill--has-link pill--has-action\" href={exportUrl} download={`${slug}.csv`}>\r\n <span>{t('importExport:exportCSV')}</span>\r\n </a>\r\n {exampleCSV && (\r\n <Button className=\"pill pill--style-light pill--has-link pill--has-action\" onClick={() => downloadExampleCSV()}>\r\n <span>{t('importExport:exampleCSV')}</span>\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n <Modal slug={modalKey} className={`${baseClass}__modal`}>\r\n {isModalOpened && (\r\n <ImportModal parser={parser} slug={props.collectionSlug} />\r\n )}\r\n </Modal>\r\n </>\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport function importExportListWithParser<T>(\r\n parser: (items: IImportItem[]) => T[],\r\n exampleCSV?: string\r\n) {\r\n // console.log('importExportListWithParser', 'parser', parser);\r\n const WithParserImportExportList: React.FC<ListViewClientProps> = ({\r\n ...props\r\n }) => {\r\n return (\r\n <ImportExportList parser={parser} exampleCSV={exampleCSV} {...props} />\r\n );\r\n };\r\n // WithParserImportExportList.displayName = `WithParserImportExportList(${getDisplayName(WrappedComponent)})`;\r\n WithParserImportExportList.displayName = 'WithParserImportExportList(ImportExportList)';\r\n return WithParserImportExportList;\r\n}\r\n"],"names":["Button","Modal","useConfig","useModal","useTranslation","getRouteResolver","React","DecoratedList","ImportModal","baseClass","ImportExportList","parser","exampleCSV","props","t","slug","collectionSlug","config","routeResolver","exportUrl","api","openModal","isModalOpen","modalKey","isModalOpened","downloadExampleCSV","element","document","createElement","style","position","file","Blob","type","href","URL","createObjectURL","download","body","appendChild","click","remove","after","div","className","onClick","span","a","importExportListWithParser","WithParserImportExportList","displayName"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,iBAAiB;AACpF,SAASC,gBAAgB,QAAQ,8BAA8B;AAE/D,OAAOC,WAAW,QAAQ;AAC1B,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,OAAO,0BAA0B;AACjC,SAASC,WAAW,QAAQ,gBAAgB;AAG5C,MAAMC,YAAY;AAOlB,OAAO,MAAMC,mBAAoD,CAAC,EAChEC,MAAM,EACNC,aAAa,EAAE,EACf,GAAGC,OACJ;IACC,yBAAyB;IACzB,MAAM,EAAEC,CAAC,EAAE,GAAGV;IAEd,MAAMW,OAAOF,MAAMG,cAAc;IAEjC,MAAM,EAAEC,MAAM,EAAE,GAAGf;IACnB,MAAMgB,gBAAgBb,iBAAiBY;IAEvC,MAAME,YAAYD,cAAcE,GAAG,CAAC,CAAC,CAAC,EAAEL,KAAK,OAAO,CAAC;IAErD,MAAM,EAAEM,SAAS,EAAEC,WAAW,EAAE,GAAGnB;IACnC,MAAMoB,WAAW,CAAC,EAAER,KAAK,aAAa,CAAC;IACvC,MAAMS,gBAAgBF,YAAYC;IAElC,MAAME,qBAAqB;QACzB,MAAMC,UAAUC,SAASC,aAAa,CAAC;QACvCF,QAAQG,KAAK,CAACC,QAAQ,GAAG;QACzB,MAAMC,OAAO,IAAIC,KAAK;YAACpB;SAAW,EAAE;YAACqB,MAAM;QAAY;QACvDP,QAAQQ,IAAI,GAAGC,IAAIC,eAAe,CAACL;QACnCL,QAAQW,QAAQ,GAAG;QACnBV,SAASW,IAAI,CAACC,WAAW,CAACb,UAAU,uCAAuC;QAC3EA,QAAQc,KAAK;QACbd,QAAQe,MAAM;IAChB;IAEA,qBACE,KAAClC;QAAcM,OAAOA;QACpB6B,qBACE;;8BAEI,MAACC;oBAAIC,WAAU;;sCACb,KAAC5C;4BAAO4C,WAAU;4BAAyDC,SAAS,IAAMxB,UAAUE;sCAClG,cAAA,KAACuB;0CAAMhC,EAAE;;;sCAEX,KAACiC;4BAAEH,WAAU;4BAAyDV,MAAMf;4BAAWkB,UAAU,CAAC,EAAEtB,KAAK,IAAI,CAAC;sCAC5G,cAAA,KAAC+B;0CAAMhC,EAAE;;;wBAEVF,4BACC,KAACZ;4BAAO4C,WAAU;4BAAyDC,SAAS,IAAMpB;sCACxF,cAAA,KAACqB;0CAAMhC,EAAE;;;;;8BAKjB,KAACb;oBAAMc,MAAMQ;oBAAUqB,WAAW,CAAC,EAAEnC,UAAU,OAAO,CAAC;8BACpDe,+BACC,KAAChB;wBAAYG,QAAQA;wBAAQI,MAAMF,MAAMG,cAAc;;;;;;AAOrE,EAAE;AAEF,OAAO,SAASgC,2BACdrC,MAAqC,EACrCC,UAAmB;IAEnB,+DAA+D;IAC/D,MAAMqC,6BAA4D,CAAC,EACjE,GAAGpC,OACJ;QACC,qBACE,KAACH;YAAiBC,QAAQA;YAAQC,YAAYA;YAAa,GAAGC,KAAK;;IAEvE;IACA,8GAA8G;IAC9GoC,2BAA2BC,WAAW,GAAG;IACzC,OAAOD;AACT"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
@use "sass:math";
|
|
2
|
+
|
|
3
|
+
.import-export-list {
|
|
4
|
+
padding-top: 0.4807692308rem;
|
|
5
|
+
padding-bottom: 0.4807692308rem;
|
|
6
|
+
color: var(--theme-elevation-400);
|
|
7
|
+
transform: translateY(-1.9230769231rem);
|
|
8
|
+
|
|
9
|
+
&__actions {
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: flex-end;
|
|
12
|
+
align-items: center;
|
|
13
|
+
column-gap: 10px;
|
|
14
|
+
margin-top: -3.8461538462rem;
|
|
15
|
+
margin-bottom: 3.8461538462rem;
|
|
16
|
+
|
|
17
|
+
.btn {
|
|
18
|
+
margin: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
svg {
|
|
22
|
+
fill: currentColor;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&__modal {
|
|
27
|
+
|
|
28
|
+
&:before,
|
|
29
|
+
&:after {
|
|
30
|
+
content: " ";
|
|
31
|
+
position: absolute;
|
|
32
|
+
top: 0;
|
|
33
|
+
right: 0;
|
|
34
|
+
bottom: 0;
|
|
35
|
+
left: 0;
|
|
36
|
+
pointer-events: none;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&:before {
|
|
40
|
+
background: var(--theme-bg);
|
|
41
|
+
opacity: 0.85;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&:after {
|
|
45
|
+
backdrop-filter: blur(5px);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.template-minimal {
|
|
49
|
+
display: flex;
|
|
50
|
+
width: 100%;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
align-items: center;
|
|
53
|
+
padding: 1.9230769231rem;
|
|
54
|
+
margin-left: auto;
|
|
55
|
+
margin-right: auto;
|
|
56
|
+
min-height: 100%;
|
|
57
|
+
min-height: 100vh;
|
|
58
|
+
z-index: 1;
|
|
59
|
+
position: relative;
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
&__wrap {
|
|
63
|
+
padding: 20px;
|
|
64
|
+
border-radius: 4px;
|
|
65
|
+
background: var(--theme-bg);
|
|
66
|
+
}
|
|
67
|
+
*/
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Modal, useConfig, useModal, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { getRouteResolver } from '@websolutespa/payload-utils';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import './ImportExportList.scss';
|
|
7
|
+
import { ImportModal } from './ImportModal';
|
|
8
|
+
export const redirectParser = (items)=>{
|
|
9
|
+
const parsedItems = [];
|
|
10
|
+
// console.log('redirectParser', 'items', items);
|
|
11
|
+
const prefixedItems = items.map((item)=>{
|
|
12
|
+
const prefixedItem = {
|
|
13
|
+
...item
|
|
14
|
+
};
|
|
15
|
+
if (prefixedItem.from && typeof prefixedItem.from === 'string' && prefixedItem.to && typeof prefixedItem.to === 'string') {
|
|
16
|
+
const from = prefixedItem.from.split('/');
|
|
17
|
+
const to = prefixedItem.to.split('/');
|
|
18
|
+
const match = [];
|
|
19
|
+
const fromLength = from.length;
|
|
20
|
+
const toLength = to.length;
|
|
21
|
+
const min = Math.min(fromLength, toLength);
|
|
22
|
+
// const max = Math.max(fromLength, toLength);
|
|
23
|
+
// const diff = max - min;
|
|
24
|
+
for(let i = 0; i < min; i++){
|
|
25
|
+
const a = from[fromLength - 1 - i];
|
|
26
|
+
const b = to[toLength - 1 - i];
|
|
27
|
+
if (a === b && !a.match(/[*(.:]/g)) {
|
|
28
|
+
match.unshift(a);
|
|
29
|
+
} else {
|
|
30
|
+
i = min;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const matchedText = match.join('/');
|
|
34
|
+
const matchedLength = matchedText.length;
|
|
35
|
+
// console.log('match', matchedText);
|
|
36
|
+
prefixedItem.fromPrefix = prefixedItem.from.substring(0, prefixedItem.from.length - matchedLength);
|
|
37
|
+
prefixedItem.toPrefix = prefixedItem.to.substring(0, prefixedItem.to.length - matchedLength);
|
|
38
|
+
// console.log(prefixedItem.fromPrefix, prefixedItem.toPrefix);
|
|
39
|
+
}
|
|
40
|
+
return prefixedItem;
|
|
41
|
+
});
|
|
42
|
+
prefixedItems.forEach((a)=>{
|
|
43
|
+
const nextPrefix = prefixedItems.find((b)=>b !== a && a.fromPrefix === b.fromPrefix);
|
|
44
|
+
if (nextPrefix) {
|
|
45
|
+
const fromPrefix = a.fromPrefix + '*';
|
|
46
|
+
if (!parsedItems.find((x)=>x.from === fromPrefix)) {
|
|
47
|
+
const toPrefix = a.toPrefix + '*';
|
|
48
|
+
parsedItems.push({
|
|
49
|
+
...a,
|
|
50
|
+
from: fromPrefix,
|
|
51
|
+
to: toPrefix
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
parsedItems.push(a);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
prefixedItems.sort((a, b)=>{
|
|
59
|
+
if (a.from && typeof a.from === 'string' && b.from && typeof b.from === 'string') {
|
|
60
|
+
return b.from.split('/').length - a.from.split('/').length;
|
|
61
|
+
} else {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// console.log('redirectParser', 'parsedItems', parsedItems);
|
|
66
|
+
return parsedItems;
|
|
67
|
+
};
|
|
68
|
+
const exampleCSV = `from,to,status
|
|
69
|
+
https://www.mydomain.com/some-path-to-redirect,https://www.mydomain.com/a-new-redirect-path,301
|
|
70
|
+
https://www.mydomain.com/some-path-to-redirect-temporarily,https://www.mydomain.com/a-new-redirect-path,307
|
|
71
|
+
https://www.mydomain.com/some-path-to-redirect-found-temporarily,https://www.mydomain.com/a-new-redirect-path,302
|
|
72
|
+
https://www.mydomain.com/some-path-to-redirect-gone,,410
|
|
73
|
+
https://www.mydomain.com/some-path-to-redirect-with-catchall/*,https://www.mydomain.com/a-new-redirect-path,301
|
|
74
|
+
https://www.mydomain.com/some-path-to-redirect-with-catchall/*,https://www.mydomain.com/a-new-redirect-path-with-catchall/*,301`;
|
|
75
|
+
export const ImportExportRedirect = (props)=>{
|
|
76
|
+
const { t } = useTranslation();
|
|
77
|
+
const { openModal, isModalOpen } = useModal();
|
|
78
|
+
const { config } = useConfig();
|
|
79
|
+
const slug = props.collectionSlug;
|
|
80
|
+
/*
|
|
81
|
+
const { collections } = config;
|
|
82
|
+
const collection = collections.find(x => x.slug === slug);
|
|
83
|
+
*/ const routeResolver = getRouteResolver(config);
|
|
84
|
+
const exportUrl = routeResolver.api(`/${slug}/export`);
|
|
85
|
+
const modalKey = `${slug}-import-modal`;
|
|
86
|
+
const isModalOpened = isModalOpen(modalKey);
|
|
87
|
+
const downloadExampleCSV = ()=>{
|
|
88
|
+
const element = document.createElement('a');
|
|
89
|
+
element.style.position = 'absolute';
|
|
90
|
+
const file = new Blob([
|
|
91
|
+
exampleCSV
|
|
92
|
+
], {
|
|
93
|
+
type: 'text/plain'
|
|
94
|
+
});
|
|
95
|
+
element.href = URL.createObjectURL(file);
|
|
96
|
+
element.download = 'example.csv';
|
|
97
|
+
document.body.appendChild(element); // Required for this to work in FireFox
|
|
98
|
+
element.click();
|
|
99
|
+
element.remove();
|
|
100
|
+
};
|
|
101
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
102
|
+
children: [
|
|
103
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
104
|
+
className: "gutter--left gutter--right import-export-list__actions",
|
|
105
|
+
children: [
|
|
106
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
107
|
+
className: "pill pill--style-light pill--size-small list-controls__toggle-columns pill--has-action pill--has-icon pill--align-icon-right",
|
|
108
|
+
onClick: ()=>openModal(modalKey),
|
|
109
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
110
|
+
children: t('importExport:importCSV')
|
|
111
|
+
})
|
|
112
|
+
}),
|
|
113
|
+
/*#__PURE__*/ _jsx("a", {
|
|
114
|
+
className: "pill pill--style-light pill--size-small list-controls__toggle-columns pill--has-action pill--has-icon pill--align-icon-right",
|
|
115
|
+
href: exportUrl,
|
|
116
|
+
download: `${slug}.csv`,
|
|
117
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
118
|
+
children: t('importExport:exportCSV')
|
|
119
|
+
})
|
|
120
|
+
}),
|
|
121
|
+
exampleCSV && /*#__PURE__*/ _jsx(Button, {
|
|
122
|
+
className: "pill pill--style-light pill--has-link pill--has-action",
|
|
123
|
+
onClick: ()=>downloadExampleCSV(),
|
|
124
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
125
|
+
children: t('importExport:exampleCSV')
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
]
|
|
129
|
+
}),
|
|
130
|
+
/*#__PURE__*/ _jsx(Modal, {
|
|
131
|
+
slug: modalKey,
|
|
132
|
+
className: "import-export-list__modal",
|
|
133
|
+
children: isModalOpened && /*#__PURE__*/ _jsx(ImportModal, {
|
|
134
|
+
parser: redirectParser,
|
|
135
|
+
slug: slug
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
]
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
//# sourceMappingURL=ImportExportRedirect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ImportExport/ImportExportRedirect.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Button, Modal, useConfig, useModal, useTranslation } from '@payloadcms/ui';\r\nimport { getRouteResolver } from '@websolutespa/payload-utils';\r\nimport type { AfterListClientProps } from 'payload';\r\nimport React from 'react';\r\nimport './ImportExportList.scss';\r\nimport { ImportModal } from './ImportModal';\r\nimport { IImportItem } from './types';\r\n\r\nexport const redirectParser = (items: IImportItem[]) => {\r\n const parsedItems: IImportItem[] = [];\r\n // console.log('redirectParser', 'items', items);\r\n const prefixedItems = items.map(item => {\r\n const prefixedItem = { ...item };\r\n if (\r\n prefixedItem.from && typeof prefixedItem.from === 'string' &&\r\n prefixedItem.to && typeof prefixedItem.to === 'string'\r\n ) {\r\n const from = prefixedItem.from.split('/');\r\n const to = prefixedItem.to.split('/');\r\n const match = [];\r\n const fromLength = from.length;\r\n const toLength = to.length;\r\n const min = Math.min(fromLength, toLength);\r\n // const max = Math.max(fromLength, toLength);\r\n // const diff = max - min;\r\n for (let i = 0; i < min; i++) {\r\n const a = from[fromLength - 1 - i]!;\r\n const b = to[toLength - 1 - i];\r\n if (a === b && !a.match(/[*(.:]/g)) {\r\n match.unshift(a);\r\n } else {\r\n i = min;\r\n }\r\n }\r\n const matchedText = match.join('/');\r\n const matchedLength = matchedText.length;\r\n // console.log('match', matchedText);\r\n prefixedItem.fromPrefix = prefixedItem.from.substring(0, prefixedItem.from.length - matchedLength);\r\n prefixedItem.toPrefix = prefixedItem.to.substring(0, prefixedItem.to.length - matchedLength);\r\n // console.log(prefixedItem.fromPrefix, prefixedItem.toPrefix);\r\n }\r\n return prefixedItem;\r\n });\r\n prefixedItems.forEach(a => {\r\n const nextPrefix = prefixedItems.find(b => b !== a && a.fromPrefix === b.fromPrefix);\r\n if (nextPrefix) {\r\n const fromPrefix = a.fromPrefix + '*';\r\n if (!parsedItems.find(x => x.from === fromPrefix)) {\r\n const toPrefix = a.toPrefix + '*';\r\n parsedItems.push({\r\n ...a,\r\n from: fromPrefix,\r\n to: toPrefix,\r\n });\r\n }\r\n } else {\r\n parsedItems.push(a);\r\n }\r\n });\r\n prefixedItems.sort((a, b) => {\r\n if (\r\n a.from && typeof a.from === 'string' &&\r\n b.from && typeof b.from === 'string'\r\n ) {\r\n return b.from.split('/').length - a.from.split('/').length;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n // console.log('redirectParser', 'parsedItems', parsedItems);\r\n return parsedItems;\r\n};\r\n\r\nconst exampleCSV = `from,to,status\r\nhttps://www.mydomain.com/some-path-to-redirect,https://www.mydomain.com/a-new-redirect-path,301\r\nhttps://www.mydomain.com/some-path-to-redirect-temporarily,https://www.mydomain.com/a-new-redirect-path,307\r\nhttps://www.mydomain.com/some-path-to-redirect-found-temporarily,https://www.mydomain.com/a-new-redirect-path,302\r\nhttps://www.mydomain.com/some-path-to-redirect-gone,,410\r\nhttps://www.mydomain.com/some-path-to-redirect-with-catchall/*,https://www.mydomain.com/a-new-redirect-path,301\r\nhttps://www.mydomain.com/some-path-to-redirect-with-catchall/*,https://www.mydomain.com/a-new-redirect-path-with-catchall/*,301`;\r\n\r\nexport const ImportExportRedirect: React.FC<AfterListClientProps> = (props) => {\r\n const { t } = useTranslation<any, any>();\r\n const { openModal, isModalOpen } = useModal();\r\n const { config } = useConfig();\r\n\r\n const slug = props.collectionSlug;\r\n\r\n /*\r\n const { collections } = config;\r\n const collection = collections.find(x => x.slug === slug);\r\n */\r\n\r\n const routeResolver = getRouteResolver(config);\r\n const exportUrl = routeResolver.api(`/${slug}/export`);\r\n\r\n const modalKey = `${slug}-import-modal`;\r\n const isModalOpened = isModalOpen(modalKey);\r\n\r\n const downloadExampleCSV = () => {\r\n const element = document.createElement('a');\r\n element.style.position = 'absolute';\r\n const file = new Blob([exampleCSV], {type: 'text/plain'});\r\n element.href = URL.createObjectURL(file);\r\n element.download = 'example.csv';\r\n document.body.appendChild(element); // Required for this to work in FireFox\r\n element.click();\r\n element.remove();\r\n };\r\n\r\n return (\r\n <>\r\n {(\r\n <div className=\"gutter--left gutter--right import-export-list__actions\">\r\n <Button className=\"pill pill--style-light pill--size-small list-controls__toggle-columns pill--has-action pill--has-icon pill--align-icon-right\" onClick={() => openModal(modalKey)}>\r\n <span>{t('importExport:importCSV')}</span>\r\n </Button>\r\n <a className=\"pill pill--style-light pill--size-small list-controls__toggle-columns pill--has-action pill--has-icon pill--align-icon-right\" href={exportUrl} download={`${slug}.csv`}>\r\n <span>{t('importExport:exportCSV')}</span>\r\n </a>\r\n {exampleCSV && (\r\n <Button className=\"pill pill--style-light pill--has-link pill--has-action\" onClick={() => downloadExampleCSV()}>\r\n <span>{t('importExport:exampleCSV')}</span>\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n <Modal slug={modalKey} className=\"import-export-list__modal\">\r\n {isModalOpened && (\r\n <ImportModal parser={redirectParser} slug={slug} />\r\n )}\r\n </Modal>\r\n </>\r\n );\r\n};\r\n"],"names":["Button","Modal","useConfig","useModal","useTranslation","getRouteResolver","React","ImportModal","redirectParser","items","parsedItems","prefixedItems","map","item","prefixedItem","from","to","split","match","fromLength","length","toLength","min","Math","i","a","b","unshift","matchedText","join","matchedLength","fromPrefix","substring","toPrefix","forEach","nextPrefix","find","x","push","sort","exampleCSV","ImportExportRedirect","props","t","openModal","isModalOpen","config","slug","collectionSlug","routeResolver","exportUrl","api","modalKey","isModalOpened","downloadExampleCSV","element","document","createElement","style","position","file","Blob","type","href","URL","createObjectURL","download","body","appendChild","click","remove","div","className","onClick","span","parser"],"mappings":"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"}
|