From 4930148d42ecdad0f76dfd43c47c449223c0bd15 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 16 Jul 2024 10:34:44 +0100 Subject: [PATCH] feat(releases): last edited and document count in bundle (#7124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(sanity): add support for sticky query params * feat(sanity): add 'perspective' dropdown * feat(sanity): include `_version` field in search results * feat(types): add `_version` field to `SanityDocument` and `SanityDocumentLike` * fix(sanity): global perspective state restoration * feat(sanity): hardcode `summerDrop` and `autumnDrop` bundles * wip: allow pairs to include multiple drafts * feat(sanity): support versioned document ids in `getPublishedId` function * feat(sanity): add `_version` field to preview observation * feat(sanity): reflect checked out bundle in document lists and list previews * debug(sanity): add version debug output to list previews * feat(sanity): add action to create new version based on an doc id * feat(sanity): update document title + version popover - add new and from existing versions * chore(sanity): move versions menu to versions folder * chore(sanity): update check for checking version * fix(sanity): ability to add new versions to doc * feat(sanity): add dumb bundle and version data, add icons and hues * feat(sanity): update styles and don't rely on random * update isVersion * docs(sanity): update comments * feat(sanity): add "latest version" menu button * refactor(sanity): update comments * chore(sanity): remove import from format date. will use something else * fix(sanity): allow uppercase characters in version identifiers * feat(sanity): add tag to list document versions request * feat(corel): integrate bundles store (#7040) * feat(corel): add bundles store * feat(corel): doc and structure updates (#7039) * docs(sanity): update comment on getAllVersionsOfDocument * fix(sanity): listing existing versions didn't account for published * chore(sanity): move latest version up (temp) * feat(sanity): update navigation of perspective + add "current badge" * feat(sanity): add global version navigation * refactor(sanity): hide document version picker, update the document icon * feat(sanity): update studio nav bar (reduce create button + spacing) * chore(sanity): general cleanup * feat(sanity): add version provider, hide only the version picker in document * chore(sanity): clean up version context * chore(sanity): clean up, move components & files to single folder * chore(sanity): clean up, move components & files to single folder * chore(sanity): add ready button to document footer * refactor(sanity): remove isVersion and add frontend guardrails * chore(sanity): clean duplicate component * chore(sanity): clean up missing dependencies * refactor(sanity): update button * refactor(sanity): clear up naming * chore(sanity): hide ready * chore(sanity): ready todos * feat(sanity): add bundle modal + update colours + remove add new version from doc * refactor(sanity): rename from release to bundle * refactor(sanity): clean up code for types (bundleform) * refactor(sanity): update method * refactor(sanity): update drafts name (draft -> drafts) in LATEST & context * refactor(sanity): use handleBundleChange instead of two separate methods * refactor(sanity): update title to use LATEST const * refactor(sanity): update draft filtering and checks (global and document level) * refactor(sanity): update context to rely on router & update query to match existing bundles (MOCK) * refactor(sanity): update handle methods to have callback * feat(sanity): add guardrails for title naming on bundle create * docs(sanity): update comments to potentially move things to plugin * refactor(sanity): merge version badges & icons * refactor(sanity): use speakingurl instead of toSlug * feat(releases): initialising releases plugin (#7048) * docs(sanity): update comment on getAllVersionsOfDocument * fix(sanity): listing existing versions didn't account for published * chore(sanity): move latest version up (temp) * feat(sanity): update navigation of perspective + add "current badge" * feat(sanity): add global version navigation * refactor(sanity): hide document version picker, update the document icon * feat(sanity): update studio nav bar (reduce create button + spacing) * chore(sanity): general cleanup * feat(sanity): add version provider, hide only the version picker in document * feat(releases): create releases tool as default plugin * feat(releases): styling and components for basic releases overview * feat(releases): adding release detail page and routing * feat(releases): uri decoding releaseID * chore(sanity): clean up version context * chore(sanity): clean up, move components & files to single folder * chore(sanity): clean up, move components & files to single folder * feat(corel): add bundles store * chore(sanity): add ready button to document footer * refactor(sanity): remove isVersion and add frontend guardrails * chore(sanity): clean duplicate component * chore(sanity): clean up missing dependencies * refactor(sanity): update button * chore(corel): use rxjs in bundlesStore listener * refactor(sanity): clear up naming * chore(sanity): hide ready * chore(sanity): ready todos * feat(corel): add retry to initialFetch * feat(releases): remove the ready concepts * feat(corel): include useBundleOperations and story * fix(corel): update imports paths * feat(sanity): add bundle modal + update colours + remove add new version from doc * refactor(sanity): rename from release to bundle * refactor(sanity): clean up code for types (bundleform) * refactor(releases): refactor releases to bundles * feat(releases): using bundle ops to fetch and create add-on bundles * refactor(releases): type guard for at least one bundle returned * fix(releases): fixing issue where overview header not hidden when no bundles * feat(releases): search filters list of releases * refactor(releases): minor refactor of hooks in BundlesOverview * refactor(sanity): update method * feat(releases): addijg concept loosely of bundle documents * feat(releases): testing for BundlesTable * feat(releases): testing for BundlesTable * feat(releases): testing for releases overview page * refactor(release): fixing types on the custom queries * refactor(releases): Creating BundleIcon * refactor(releases): minor refactor and tidy to component logic * refactor(releases): minor format changes * refactor(releases): create bundle dialog creates itself and then returns * refactor(releases): create bundle dialog creates itself and then returns * feat(releases): minor style update to match prototype on the mode picker * feat(releases): minor style update to match prototype on the mode picker * refactor(releases): moving search into table header as per prototype * chore(corel): add eslintrc change, remove progress icon and update types (#7050) --------- Co-authored-by: RitaDias Co-authored-by: Pedro Bonamin Co-authored-by: Pedro Bonamin <46196328+pedrobonamin@users.noreply.github.com> * refactor(releases): removing shortRelativeDate (#7051) * chore(corel): add bundles provider (#7054) * chore(corel): add bundles provider * fix(corel): update bundles overview tests * feat(COREL): update types to bundle + add create bundle functionality (#7047) * refactor(sanity): update types to bundle * feat(sanity): add ability to create releases from dialog + update types * feat(sanity): update list on global and document to use store * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * refactor(sanity): update type in dummyGetter * chore(sanity): remove BUNDLES const * chore(sanity): update LATEST type to Partial * chore(sanity): update validation for bundle date creation * chore(sanity): clean up code * refactor(sanity): add archived filter * refactor(sanity): make single bundle menu + clean up * chore(sanity): add missing properties * feat(sanity): add loading & remove unused code * feat(sanity): add loading to document version, update filter * chore(sanity): rename VersionBadge to BundleBadge * chore(sanity): clean up methods and style * chore(sanity): remove unused import * refactor(sanity): use Bundle provider instead of store * chore(sanity): update bundleRow to use the new name for badge * chore(sanity): clean up code * refactor(sanity): re-add oncancel and oncreate props in dialog * refactor(sanity): add scroll to bundle menu * refactor(sanity): move from archived to archivedAt * refactor(sanity): only show the list of bundles if it has more than published / drafts * chore(sanity): remove warnings comments * refactor(COREL): refactor version context & renaming (#7071) * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * chore(sanity): update LATEST type to Partial * refactor(sanity): make single bundle menu + clean up * chore(sanity): remove warnings comments * refactor(sanity): move version provider to its own file + organise + add useVersion * refactor(sanity): remove provider + context, move logic to hook * chore(sanity): remove comments + change name from setCurrentVersion to setGlobalBundle * chore(sanity): rename useVersion to useBundle * chore(sanity): update comments * chore(sanity): Rename currentVersion * refactor(sanity): rename currentBudnle and setGlobalBundle * chore(sanity): rename versions to bundles in core directory * chore(sanity): rename to GlobalPerspectiveMenu and move to navbar directory * chore(sanity): rename to DocumentPerspectiveMenu and move to navbar directory * chore(sanity): remove isDraft from usePerspective, add new util * refactor(sanity): remove isDraft * refactor(sanity): use current global in the bundle badge * fix(corel): update uses of collate, add typeguard for bundles and add release tag to addonDatasetProvider (#7074) * fix(corel): update uses of collate, add typeguard for bundles and add release tag to addonDatasetProvider * fix(corel): update imports for bundleRow test * chore(corel): disable publish tests * fix(corel): update failing tests * fix(corel): update bundle actions definition * fix(corel): remove not used file * fix(corel): update DocumentHeaderTitle test * fix(corel): fix lint issues * feat(releases): archive and unarchive releases (#7072) * refactor(sanity): update types to bundle * feat(sanity): add ability to create releases from dialog + update types * feat(sanity): update list on global and document to use store * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * refactor(sanity): update type in dummyGetter * chore(sanity): remove BUNDLES const * chore(sanity): update LATEST type to Partial * chore(sanity): update validation for bundle date creation * chore(sanity): clean up code * refactor(sanity): add archived filter * refactor(sanity): make single bundle menu + clean up * chore(sanity): add missing properties * feat(sanity): add loading & remove unused code * feat(sanity): add loading to document version, update filter * chore(sanity): rename VersionBadge to BundleBadge * chore(sanity): clean up methods and style * chore(sanity): remove unused import * refactor(sanity): use Bundle provider instead of store * chore(sanity): update bundleRow to use the new name for badge * chore(sanity): clean up code * refactor(sanity): re-add oncancel and oncreate props in dialog * refactor(sanity): add scroll to bundle menu * refactor(sanity): move from archived to archivedAt * refactor(sanity): move version provider to its own file + organise + add useVersion * refactor(sanity): remove provider + context, move logic to hook * chore(sanity): remove comments + change name from setCurrentVersion to setGlobalBundle * chore(sanity): rename useVersion to useBundle * chore(sanity): update comments * chore(sanity): Rename currentVersion * refactor(sanity): rename currentBudnle and setGlobalBundle * chore(sanity): rename versions to bundles in core directory * chore(sanity): rename to GlobalPerspectiveMenu and move to navbar directory * chore(sanity): rename to DocumentPerspectiveMenu and move to navbar directory * feat(releases): support for (un)archive * chore(releases): updating testing for BundlesOverview * chore(releases): new tests for BundleMenuButton and (un)archive * fix(releases): disabling bundle menu btn when action is performed --------- Co-authored-by: RitaDias Co-authored-by: RitaDias * refactor(sanity): move bundle metadata store to resource cache Co-authored-by: Pedro Bonamin * feat(releases): bundle store starts to support bundle metadata * feat(releases): loading state only on initial fetch of metadata * feat(releases): added created at col * feat(releases): patching mutated bundle slugs * feat(releases): aggregate all metadata listening calls * fix(releases): fixing empty observed result state * refactor(releases): move to slugs; split agg from createBundleStore * fix(deps): Update dev-non-major (#7100) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update dependency get-it to ^8.6.3 (#7108) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update dependency @sanity/client to ^6.20.2 (#7111) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * refactor(sanity): remove "features" (#7097) * fix(deps): update dependency @sanity/client to ^6.20.2 (#7110) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update dependency @sanity/bifur-client to ^0.4.1 (#7102) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update dependency @sanity/ui to ^2.6.3 (#7104) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update dependency react-rx to ^3.1.1 (#7113) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency @sanity/tsdoc to v1.0.83 (#7080) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency esbuild to ^0.23.0 (#7106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * test(cli): use separate tarball location for cursor export test (#7118) * fix(core): minor typo fix in i18n comment (#7115) * fix(core): minor typo fix in i18n comment * refactor(structure): add missing space to tsdoc * feat(router): update router to support query params in intent links (#7095) * feat(router): update router to support query params in intent links * fix(core): update RouterStateEvent interface * chore(core): add tests for query param intents * feat(sanity): add 'perspective' dropdown * fix(sanity): global perspective state restoration * feat(sanity): hardcode `summerDrop` and `autumnDrop` bundles * feat(sanity): reflect checked out bundle in document lists and list previews * debug(sanity): add version debug output to list previews * feat(sanity): add action to create new version based on an doc id * feat(sanity): update document title + version popover - add new and from existing versions * chore(sanity): move versions menu to versions folder * chore(sanity): update check for checking version * fix(sanity): ability to add new versions to doc * feat(sanity): add dumb bundle and version data, add icons and hues * feat(sanity): update styles and don't rely on random * update isVersion * docs(sanity): update comments * feat(sanity): add "latest version" menu button * refactor(sanity): update comments * chore(sanity): remove import from format date. will use something else * fix(sanity): allow uppercase characters in version identifiers * feat(sanity): add tag to list document versions request * feat(corel): integrate bundles store (#7040) * feat(corel): add bundles store * feat(corel): doc and structure updates (#7039) * docs(sanity): update comment on getAllVersionsOfDocument * fix(sanity): listing existing versions didn't account for published * chore(sanity): move latest version up (temp) * feat(sanity): update navigation of perspective + add "current badge" * feat(sanity): add global version navigation * refactor(sanity): hide document version picker, update the document icon * feat(sanity): update studio nav bar (reduce create button + spacing) * chore(sanity): general cleanup * feat(sanity): add version provider, hide only the version picker in document * chore(sanity): clean up version context * chore(sanity): clean up, move components & files to single folder * chore(sanity): clean up, move components & files to single folder * chore(sanity): add ready button to document footer * refactor(sanity): remove isVersion and add frontend guardrails * chore(sanity): clean duplicate component * chore(sanity): clean up missing dependencies * refactor(sanity): update button * refactor(sanity): clear up naming * chore(sanity): hide ready * chore(sanity): ready todos * feat(sanity): add bundle modal + update colours + remove add new version from doc * refactor(sanity): rename from release to bundle * refactor(sanity): clean up code for types (bundleform) * refactor(sanity): update method * refactor(sanity): update drafts name (draft -> drafts) in LATEST & context * refactor(sanity): use handleBundleChange instead of two separate methods * refactor(sanity): update title to use LATEST const * refactor(sanity): update draft filtering and checks (global and document level) * refactor(sanity): update context to rely on router & update query to match existing bundles (MOCK) * refactor(sanity): update handle methods to have callback * feat(sanity): add guardrails for title naming on bundle create * docs(sanity): update comments to potentially move things to plugin * refactor(sanity): merge version badges & icons * refactor(sanity): use speakingurl instead of toSlug * feat(releases): initialising releases plugin (#7048) * docs(sanity): update comment on getAllVersionsOfDocument * fix(sanity): listing existing versions didn't account for published * chore(sanity): move latest version up (temp) * feat(sanity): update navigation of perspective + add "current badge" * feat(sanity): add global version navigation * refactor(sanity): hide document version picker, update the document icon * feat(sanity): update studio nav bar (reduce create button + spacing) * chore(sanity): general cleanup * feat(sanity): add version provider, hide only the version picker in document * feat(releases): create releases tool as default plugin * feat(releases): styling and components for basic releases overview * feat(releases): adding release detail page and routing * feat(releases): uri decoding releaseID * chore(sanity): clean up version context * chore(sanity): clean up, move components & files to single folder * chore(sanity): clean up, move components & files to single folder * feat(corel): add bundles store * chore(sanity): add ready button to document footer * refactor(sanity): remove isVersion and add frontend guardrails * chore(sanity): clean duplicate component * chore(sanity): clean up missing dependencies * refactor(sanity): update button * chore(corel): use rxjs in bundlesStore listener * refactor(sanity): clear up naming * chore(sanity): hide ready * chore(sanity): ready todos * feat(corel): add retry to initialFetch * feat(releases): remove the ready concepts * feat(corel): include useBundleOperations and story * fix(corel): update imports paths * feat(sanity): add bundle modal + update colours + remove add new version from doc * refactor(sanity): rename from release to bundle * refactor(sanity): clean up code for types (bundleform) * refactor(releases): refactor releases to bundles * feat(releases): using bundle ops to fetch and create add-on bundles * refactor(releases): type guard for at least one bundle returned * fix(releases): fixing issue where overview header not hidden when no bundles * feat(releases): search filters list of releases * refactor(releases): minor refactor of hooks in BundlesOverview * refactor(sanity): update method * feat(releases): addijg concept loosely of bundle documents * feat(releases): testing for BundlesTable * feat(releases): testing for BundlesTable * feat(releases): testing for releases overview page * refactor(release): fixing types on the custom queries * refactor(releases): Creating BundleIcon * refactor(releases): minor refactor and tidy to component logic * refactor(releases): minor format changes * refactor(releases): create bundle dialog creates itself and then returns * refactor(releases): create bundle dialog creates itself and then returns * feat(releases): minor style update to match prototype on the mode picker * feat(releases): minor style update to match prototype on the mode picker * refactor(releases): moving search into table header as per prototype * chore(corel): add eslintrc change, remove progress icon and update types (#7050) --------- Co-authored-by: RitaDias Co-authored-by: Pedro Bonamin Co-authored-by: Pedro Bonamin <46196328+pedrobonamin@users.noreply.github.com> * refactor(releases): removing shortRelativeDate (#7051) * chore(corel): add bundles provider (#7054) * chore(corel): add bundles provider * fix(corel): update bundles overview tests * feat(COREL): update types to bundle + add create bundle functionality (#7047) * refactor(sanity): update types to bundle * feat(sanity): add ability to create releases from dialog + update types * feat(sanity): update list on global and document to use store * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * refactor(sanity): update type in dummyGetter * chore(sanity): remove BUNDLES const * chore(sanity): update LATEST type to Partial * chore(sanity): update validation for bundle date creation * chore(sanity): clean up code * refactor(sanity): add archived filter * refactor(sanity): make single bundle menu + clean up * chore(sanity): add missing properties * feat(sanity): add loading & remove unused code * feat(sanity): add loading to document version, update filter * chore(sanity): rename VersionBadge to BundleBadge * chore(sanity): clean up methods and style * chore(sanity): remove unused import * refactor(sanity): use Bundle provider instead of store * chore(sanity): update bundleRow to use the new name for badge * chore(sanity): clean up code * refactor(sanity): re-add oncancel and oncreate props in dialog * refactor(sanity): add scroll to bundle menu * refactor(sanity): move from archived to archivedAt * refactor(sanity): only show the list of bundles if it has more than published / drafts * chore(sanity): remove warnings comments * refactor(COREL): refactor version context & renaming (#7071) * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * chore(sanity): update LATEST type to Partial * refactor(sanity): make single bundle menu + clean up * chore(sanity): remove warnings comments * refactor(sanity): move version provider to its own file + organise + add useVersion * refactor(sanity): remove provider + context, move logic to hook * chore(sanity): remove comments + change name from setCurrentVersion to setGlobalBundle * chore(sanity): rename useVersion to useBundle * chore(sanity): update comments * chore(sanity): Rename currentVersion * refactor(sanity): rename currentBudnle and setGlobalBundle * chore(sanity): rename versions to bundles in core directory * chore(sanity): rename to GlobalPerspectiveMenu and move to navbar directory * chore(sanity): rename to DocumentPerspectiveMenu and move to navbar directory * chore(sanity): remove isDraft from usePerspective, add new util * refactor(sanity): remove isDraft * refactor(sanity): use current global in the bundle badge * fix(corel): update uses of collate, add typeguard for bundles and add release tag to addonDatasetProvider (#7074) * fix(corel): update uses of collate, add typeguard for bundles and add release tag to addonDatasetProvider * fix(corel): update imports for bundleRow test * chore(corel): disable publish tests * fix(corel): update failing tests * fix(corel): update bundle actions definition * fix(corel): remove not used file * fix(corel): update DocumentHeaderTitle test * fix(corel): fix lint issues * feat(releases): archive and unarchive releases (#7072) * refactor(sanity): update types to bundle * feat(sanity): add ability to create releases from dialog + update types * feat(sanity): update list on global and document to use store * feat(sanity): update types, add icon and hue picker to bundles, update uis * feat(sanity): add date picker to bundleform * refactor(sanity): update publishAt fields in menus * refactor(sanity): update type in dummyGetter * chore(sanity): remove BUNDLES const * chore(sanity): update LATEST type to Partial * chore(sanity): update validation for bundle date creation * chore(sanity): clean up code * refactor(sanity): add archived filter * refactor(sanity): make single bundle menu + clean up * chore(sanity): add missing properties * feat(sanity): add loading & remove unused code * feat(sanity): add loading to document version, update filter * chore(sanity): rename VersionBadge to BundleBadge * chore(sanity): clean up methods and style * chore(sanity): remove unused import * refactor(sanity): use Bundle provider instead of store * chore(sanity): update bundleRow to use the new name for badge * chore(sanity): clean up code * refactor(sanity): re-add oncancel and oncreate props in dialog * refactor(sanity): add scroll to bundle menu * refactor(sanity): move from archived to archivedAt * refactor(sanity): move version provider to its own file + organise + add useVersion * refactor(sanity): remove provider + context, move logic to hook * chore(sanity): remove comments + change name from setCurrentVersion to setGlobalBundle * chore(sanity): rename useVersion to useBundle * chore(sanity): update comments * chore(sanity): Rename currentVersion * refactor(sanity): rename currentBudnle and setGlobalBundle * chore(sanity): rename versions to bundles in core directory * chore(sanity): rename to GlobalPerspectiveMenu and move to navbar directory * chore(sanity): rename to DocumentPerspectiveMenu and move to navbar directory * feat(releases): support for (un)archive * chore(releases): updating testing for BundlesOverview * chore(releases): new tests for BundleMenuButton and (un)archive * fix(releases): disabling bundle menu btn when action is performed --------- Co-authored-by: RitaDias Co-authored-by: RitaDias * refactor(sanity): move bundle metadata store to resource cache Co-authored-by: Pedro Bonamin * refactor(releases): only adding metadata context when not already existing * refactor(releases): only adding metadata context when not already existing * refactor(releases): creating tableBundles in BundlesOverview * refactor(releases): renaming projection of query for metadata * chore(releases): code comments * fix(releases): fixing issue with removing bundles from aggregator listener * refactor(releases): nesting bundle doc metadata in TableBunde * fix(corel): update releases router to use bundle name * feat(corel): add bundle details screen * chore: update @sanity/icons package * feat(corel): releases DocumentRow updates * fix(corel): update BundleIconEditorPicker types * fix(corel): update bundles table test * fix(corel): add filter in documents table * chore(corel): update file location and naming * feat(corel): add document actions to document row * fix(core): remove references to bundles in useListener hook * fix(corel): add search params to IntentLink * chore(corel): remove router type change and restore previous pnpm-lock file * fix(releases): fixing tests for BundlesTable * fix(releases):adding tests for doc count and updated time to bundles table * fix(corel): update bundlesTable tests * fix(releases): fixing BundlesOverview tests * feat(releases): delete bundle confirm lists document count in bundle * refactor(releases): update BundlesMetadataContext to export interface * fix(releases): fix BundlesTable tests * refactor(releases): rename components and files to releases rather than bundles * feat(releases): assigning authorId on release creation * fix(releases): update BundleMenuButton test with hue and icon properties * feat(releases): release detail delete uses documents count in bundle * fix(releases): using short and temporal version of relative time * refactor(releases): startWith to handle initial loading state on fetch --------- Co-authored-by: Bjørge Næss Co-authored-by: Ash Co-authored-by: RitaDias Co-authored-by: Pedro Bonamin <46196328+pedrobonamin@users.noreply.github.com> Co-authored-by: RitaDias Co-authored-by: Pedro Bonamin Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Espen Hovlandsdal --- .../core/releases/BundlesMetadataContext.ts | 18 +++ packages/sanity/src/_singletons/index.ts | 1 + .../BundleMenuButton/BundleMenuButton.tsx | 18 ++- .../__tests__/BundleMenuButton.test.tsx | 53 +++++++- .../ReleaseHeader.tsx} | 22 +++- .../ReleaseRow.tsx} | 50 ++++++- .../ReleasesTable.tsx} | 19 ++- .../__tests__/ReleasesTable.test.tsx} | 110 ++++++++++++---- .../contexts/BundlesMetadataProvider.tsx | 101 ++++++++++++++ .../releases/plugin/ReleasesStudioLayout.tsx | 9 +- .../core/releases/tool/ReleasesOverview.tsx | 29 ++-- .../tool/__tests__/ReleasesOverview.test.tsx | 68 ++++++++-- .../releases/tool/detail/ReleaseDetail.tsx | 12 +- .../core/releases/tool/useBundlesMetadata.ts | 52 ++++++++ .../src/core/store/_legacy/datastores.ts | 11 +- .../createBundlesMetadataAggregator.ts | 124 ++++++++++++++++++ .../core/store/bundles/createBundlesStore.ts | 12 +- .../sanity/src/core/store/bundles/types.ts | 2 + .../core/store/bundles/useBundleOperations.ts | 5 +- 19 files changed, 627 insertions(+), 89 deletions(-) create mode 100644 packages/sanity/src/_singletons/core/releases/BundlesMetadataContext.ts rename packages/sanity/src/core/releases/components/{BundlesTable/BundleHeader.tsx => ReleasesTable/ReleaseHeader.tsx} (59%) rename packages/sanity/src/core/releases/components/{BundlesTable/BundleRow.tsx => ReleasesTable/ReleaseRow.tsx} (51%) rename packages/sanity/src/core/releases/components/{BundlesTable/BundlesTable.tsx => ReleasesTable/ReleasesTable.tsx} (65%) rename packages/sanity/src/core/releases/components/{BundlesTable/__tests__/BundlesTable.test.tsx => ReleasesTable/__tests__/ReleasesTable.test.tsx} (50%) create mode 100644 packages/sanity/src/core/releases/contexts/BundlesMetadataProvider.tsx create mode 100644 packages/sanity/src/core/releases/tool/useBundlesMetadata.ts create mode 100644 packages/sanity/src/core/store/bundles/createBundlesMetadataAggregator.ts diff --git a/packages/sanity/src/_singletons/core/releases/BundlesMetadataContext.ts b/packages/sanity/src/_singletons/core/releases/BundlesMetadataContext.ts new file mode 100644 index 000000000000..09c2f0fc4c20 --- /dev/null +++ b/packages/sanity/src/_singletons/core/releases/BundlesMetadataContext.ts @@ -0,0 +1,18 @@ +import {createContext} from 'react' + +import type {MetadataWrapper} from '../../../core/store/bundles/createBundlesMetadataAggregator' + +/** + * @internal + */ +export interface BundlesMetadataContextValue { + state: MetadataWrapper + addBundleSlugsToListener: (slugs: string[]) => void + removeBundleSlugsFromListener: (slugs: string[]) => void +} + +/** + * @internal + * @hidden + */ +export const BundlesMetadataContext = createContext(null) diff --git a/packages/sanity/src/_singletons/index.ts b/packages/sanity/src/_singletons/index.ts index 031b9182bb12..95443cbe1f0d 100644 --- a/packages/sanity/src/_singletons/index.ts +++ b/packages/sanity/src/_singletons/index.ts @@ -27,6 +27,7 @@ export * from './core/form/studio/ValidationContext' export * from './core/i18n/LocaleContext' export * from './core/presence/FormFieldPresenceContext' export * from './core/presence/overlay/PresenceTrackerContexts' +export * from './core/releases/BundlesMetadataContext' export * from './core/schedulePublishing/DocumentActionPropsContext' export * from './core/schedulePublishing/tool/ScheduledPublishingEnabledContext' export * from './core/schedulePublishing/tool/SchedulePublishingUpsellContext' diff --git a/packages/sanity/src/core/releases/components/BundleMenuButton/BundleMenuButton.tsx b/packages/sanity/src/core/releases/components/BundleMenuButton/BundleMenuButton.tsx index 67dacb6ba277..4be88630e876 100644 --- a/packages/sanity/src/core/releases/components/BundleMenuButton/BundleMenuButton.tsx +++ b/packages/sanity/src/core/releases/components/BundleMenuButton/BundleMenuButton.tsx @@ -9,9 +9,10 @@ import {useBundleOperations} from '../../../store/bundles/useBundleOperations' type Props = { bundle?: BundleDocument + documentCount: number } -export const BundleMenuButton = ({bundle}: Props) => { +export const BundleMenuButton = ({bundle, documentCount}: Props) => { const {deleteBundle, updateBundle} = useBundleOperations() const router = useRouter() const isBundleArchived = !!bundle?.archivedAt @@ -56,8 +57,7 @@ export const BundleMenuButton = ({bundle}: Props) => { setIsPerformingOperation(false) } - // TODO: Replace this with the count once it's available. Wait for @jordanl17 change on that. - const count = 2 + const bundleHasDocuments = !!documentCount return ( <> @@ -92,8 +92,10 @@ export const BundleMenuButton = ({bundle}: Props) => { {showDiscardDialog && ( setShowDiscardDialog(false)} + // remove body padding if no documents in release + padding={bundleHasDocuments} footer={{ confirmButton: { tone: 'default', @@ -103,9 +105,11 @@ export const BundleMenuButton = ({bundle}: Props) => { }, }} > - - This will also delete {count} document version{count > 1 ? 's' : ''}. - + {bundleHasDocuments && ( + + This will also delete {documentCount} document version{documentCount > 1 ? 's' : ''}. + + )} )} diff --git a/packages/sanity/src/core/releases/components/BundleMenuButton/__tests__/BundleMenuButton.test.tsx b/packages/sanity/src/core/releases/components/BundleMenuButton/__tests__/BundleMenuButton.test.tsx index e0a05c6bcd81..0deebe1a9eab 100644 --- a/packages/sanity/src/core/releases/components/BundleMenuButton/__tests__/BundleMenuButton.test.tsx +++ b/packages/sanity/src/core/releases/components/BundleMenuButton/__tests__/BundleMenuButton.test.tsx @@ -1,4 +1,4 @@ -import {describe, expect, jest, test} from '@jest/globals' +import {beforeEach, describe, expect, jest, test} from '@jest/globals' import {fireEvent, render, screen} from '@testing-library/react' import {act} from 'react' import {useRouter} from 'sanity/router' @@ -21,14 +21,18 @@ jest.mock('sanity/router', () => ({ useRouter: jest.fn().mockReturnValue({state: {}, navigate: jest.fn()}), })) -const renderTest = async (bundle: BundleDocument) => { +const renderTest = async (bundle: BundleDocument, documentCount: number = 2) => { const wrapper = await createTestProvider({ resources: [releasesUsEnglishLocaleBundle], }) - return render(, {wrapper}) + return render(, {wrapper}) } describe('BundleMenuButton', () => { + beforeEach(() => { + jest.clearAllMocks() + }) + test('will archive an unarchived bundle', async () => { const activeBundle: BundleDocument = { _id: 'activeBundle', @@ -40,6 +44,8 @@ describe('BundleMenuButton', () => { _createdAt: new Date().toISOString(), _updatedAt: new Date().toISOString(), _rev: '', + hue: 'gray', + icon: 'cube', } await renderTest(activeBundle) @@ -67,6 +73,8 @@ describe('BundleMenuButton', () => { _createdAt: new Date().toISOString(), _updatedAt: new Date().toISOString(), _rev: '', + hue: 'gray', + icon: 'cube', } await renderTest(archivedBundle) @@ -82,7 +90,7 @@ describe('BundleMenuButton', () => { }) }) - test('will delete a bundle', async () => { + test('will delete a bundle with documents', async () => { const activeBundle: BundleDocument = { _id: 'activeBundle', _type: 'bundle', @@ -93,6 +101,8 @@ describe('BundleMenuButton', () => { _createdAt: new Date().toISOString(), _updatedAt: new Date().toISOString(), _rev: '', + hue: 'gray', + icon: 'cube', } await renderTest(activeBundle) @@ -102,6 +112,8 @@ describe('BundleMenuButton', () => { fireEvent.click(screen.getByText('Delete')) }) expect(useBundleOperations().deleteBundle).not.toHaveBeenCalled() + // TODO: remove not exact once i18n used for strings + screen.getByText('This will also delete 2 document versions', {exact: false}) await act(() => { fireEvent.click(screen.getByText('Confirm')) @@ -110,4 +122,37 @@ describe('BundleMenuButton', () => { expect(useBundleOperations().deleteBundle).toHaveBeenCalledWith(activeBundle) expect(useRouter().navigate).not.toHaveBeenCalled() }) + + test('will delete a bundle with no documents', async () => { + const activeEmptyBundle: BundleDocument = { + _id: 'activeEmptyBundle', + _type: 'bundle', + archivedAt: new Date().toISOString(), + title: 'activeEmptyBundle', + name: 'activeEmptyBundle', + authorId: 'author', + _createdAt: new Date().toISOString(), + _updatedAt: new Date().toISOString(), + _rev: '', + hue: 'gray', + icon: 'cube', + } + await renderTest(activeEmptyBundle, 0) + + fireEvent.click(screen.getByLabelText('Release menu')) + + await act(() => { + fireEvent.click(screen.getByText('Delete')) + }) + expect(useBundleOperations().deleteBundle).not.toHaveBeenCalled() + // confirm dialog body is hidden when no documents in bundle + expect(screen.queryByTestId('confirm-delete-body')).toBeNull() + + await act(() => { + fireEvent.click(screen.getByText('Confirm')) + }) + + expect(useBundleOperations().deleteBundle).toHaveBeenCalledWith(activeEmptyBundle) + expect(useRouter().navigate).not.toHaveBeenCalled() + }) }) diff --git a/packages/sanity/src/core/releases/components/BundlesTable/BundleHeader.tsx b/packages/sanity/src/core/releases/components/ReleasesTable/ReleaseHeader.tsx similarity index 59% rename from packages/sanity/src/core/releases/components/BundlesTable/BundleHeader.tsx rename to packages/sanity/src/core/releases/components/ReleasesTable/ReleaseHeader.tsx index b4c01941bb23..f2189840dee0 100644 --- a/packages/sanity/src/core/releases/components/BundlesTable/BundleHeader.tsx +++ b/packages/sanity/src/core/releases/components/ReleasesTable/ReleaseHeader.tsx @@ -1,16 +1,16 @@ import {SearchIcon} from '@sanity/icons' -import {Button, Card, Flex, Stack, TextInput} from '@sanity/ui' +import {Box, Button, Card, Flex, Stack, Text, TextInput} from '@sanity/ui' /** * @internal */ -export interface BundleHeaderProps { +export interface ReleaseHeaderProps { searchDisabled?: boolean searchTerm?: string setSearchTerm: (value?: string) => void } -export function BundleHeader({searchDisabled, searchTerm, setSearchTerm}: BundleHeaderProps) { +export function ReleaseHeader({searchDisabled, searchTerm, setSearchTerm}: ReleaseHeaderProps) { return ( @@ -29,6 +29,22 @@ export function BundleHeader({searchDisabled, searchTerm, setSearchTerm}: Bundle clearButton={!!searchTerm} /> + {/* Number of documents */} + + + + Documents + + + + {/* Created */} + +