Skip to content

Commit

Permalink
feat(releases): last edited and document count in bundle (#7124)
Browse files Browse the repository at this point in the history
* 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 <anarita151@gmail.com>
Co-authored-by: Pedro Bonamin <pedrobonamin@gmail.com>
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 <anarita151@gmail.com>
Co-authored-by: RitaDias <rita@sanity.io>

* refactor(sanity): move bundle metadata store to resource cache

Co-authored-by: Pedro Bonamin <pedrobonamin@gmail.com>

* 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 <anarita151@gmail.com>
Co-authored-by: Pedro Bonamin <pedrobonamin@gmail.com>
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 <anarita151@gmail.com>
Co-authored-by: RitaDias <rita@sanity.io>

* refactor(sanity): move bundle metadata store to resource cache

Co-authored-by: Pedro Bonamin <pedrobonamin@gmail.com>

* 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 <bjoerge@gmail.com>
Co-authored-by: Ash <ash@sanity.io>
Co-authored-by: RitaDias <anarita151@gmail.com>
Co-authored-by: Pedro Bonamin <46196328+pedrobonamin@users.noreply.github.com>
Co-authored-by: RitaDias <rita@sanity.io>
Co-authored-by: Pedro Bonamin <pedrobonamin@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Espen Hovlandsdal <espen@hovlandsdal.com>
  • Loading branch information
9 people committed Jul 17, 2024
1 parent 608e577 commit 68333d9
Show file tree
Hide file tree
Showing 19 changed files with 627 additions and 89 deletions.
Original file line number Diff line number Diff line change
@@ -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<BundlesMetadataContextValue | null>(null)
1 change: 1 addition & 0 deletions packages/sanity/src/_singletons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export * from './core/form/studio/TreeEditingEnabledContext'
export * from './core/form/studio/ValidationContext'
export * from './core/i18n/LocaleContext'
export * from './core/presence/FormFieldPresenceContext'
export * from './core/releases/BundlesMetadataContext'
export * from './core/schedulePublishing/DocumentActionPropsContext'
export * from './core/schedulePublishing/tool/ScheduledPublishingEnabledContext'
export * from './core/schedulePublishing/tool/SchedulePublishingUpsellContext'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 (
<>
Expand Down Expand Up @@ -92,8 +92,10 @@ export const BundleMenuButton = ({bundle}: Props) => {
{showDiscardDialog && (
<Dialog
id="discard-version-dialog"
header={`Are you sure you want to delete the ${bundle?.title} release?`}
header={`Are you sure you want to delete the '${bundle?.title}' release?`}
onClose={() => setShowDiscardDialog(false)}
// remove body padding if no documents in release
padding={bundleHasDocuments}
footer={{
confirmButton: {
tone: 'default',
Expand All @@ -103,9 +105,11 @@ export const BundleMenuButton = ({bundle}: Props) => {
},
}}
>
<Text muted size={1}>
This will also delete {count} document version{count > 1 ? 's' : ''}.
</Text>
{bundleHasDocuments && (
<Text data-testid="confirm-delete-body" muted size={1}>
This will also delete {documentCount} document version{documentCount > 1 ? 's' : ''}.
</Text>
)}
</Dialog>
)}
</>
Expand Down
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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(<BundleMenuButton bundle={bundle} />, {wrapper})
return render(<BundleMenuButton bundle={bundle} documentCount={documentCount} />, {wrapper})
}

describe('BundleMenuButton', () => {
beforeEach(() => {
jest.clearAllMocks()
})

test('will archive an unarchived bundle', async () => {
const activeBundle: BundleDocument = {
_id: 'activeBundle',
Expand All @@ -40,6 +44,8 @@ describe('BundleMenuButton', () => {
_createdAt: new Date().toISOString(),
_updatedAt: new Date().toISOString(),
_rev: '',
hue: 'gray',
icon: 'cube',
}

await renderTest(activeBundle)
Expand Down Expand Up @@ -67,6 +73,8 @@ describe('BundleMenuButton', () => {
_createdAt: new Date().toISOString(),
_updatedAt: new Date().toISOString(),
_rev: '',
hue: 'gray',
icon: 'cube',
}
await renderTest(archivedBundle)

Expand All @@ -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',
Expand All @@ -93,6 +101,8 @@ describe('BundleMenuButton', () => {
_createdAt: new Date().toISOString(),
_updatedAt: new Date().toISOString(),
_rev: '',
hue: 'gray',
icon: 'cube',
}
await renderTest(activeBundle)

Expand All @@ -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'))
Expand All @@ -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()
})
})
Original file line number Diff line number Diff line change
@@ -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 (
<Card as="thead" radius={3}>
<Flex as="tr">
Expand All @@ -29,6 +29,22 @@ export function BundleHeader({searchDisabled, searchTerm, setSearchTerm}: Bundle
clearButton={!!searchTerm}
/>
</Stack>
{/* Number of documents */}
<Flex as="th" paddingY={3} sizing="border" style={{width: 90}}>
<Box padding={2}>
<Text muted size={1} weight="medium">
Documents
</Text>
</Box>
</Flex>
{/* Created */}
<Flex as="th" paddingY={3} sizing="border" style={{width: 120}}>
<Button mode="bleed" padding={2} radius={3} space={1} text="Created" />
</Flex>
{/* Edited */}
<Flex as="th" paddingY={3} sizing="border" style={{width: 100}}>
<Button mode="bleed" padding={2} radius={3} space={1} text="Edited" />
</Flex>
{/* Published */}
<Flex
as="th"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@ import {Box, Card, Flex, Stack, Text} from '@sanity/ui'
import {useRouter} from 'sanity/router'

import {BundleBadge} from '../../../bundles/components/BundleBadge'
import {RelativeTime} from '../../../components'
import {type BundleDocument} from '../../../store/bundles/types'
import {RelativeTime, UserAvatar} from '../../../components'
import {BundleMenuButton} from '../BundleMenuButton/BundleMenuButton'
import {type TableBundle} from './ReleasesTable'

type Props = {
bundle: BundleDocument
type ReleaseRowProps = {
bundle: TableBundle
}

export function BundleRow({bundle}: Props) {
export function ReleaseRow({bundle}: ReleaseRowProps) {
const {documentsMetadata} = bundle
const router = useRouter()

return (
Expand Down Expand Up @@ -38,6 +39,43 @@ export function BundleRow({bundle}: Props) {
</Flex>
</Card>
</Box>
{/* # of documents */}
<Flex as="td" align="center" paddingX={2} paddingY={3} sizing="border" style={{width: 90}}>
<Text muted size={1}>
{documentsMetadata.documentCount}
</Text>
</Flex>
{/* Created */}
<Flex
as="td"
align="center"
gap={2}
paddingX={2}
paddingY={3}
sizing="border"
style={{width: 120}}
>
{bundle.authorId && <UserAvatar size={0} user={bundle.authorId} />}
<Text muted size={1}>
<RelativeTime time={bundle._createdAt} useTemporalPhrase minimal />
</Text>
</Flex>
{/* Edited */}
<Flex
as="td"
align="center"
gap={2}
paddingX={2}
paddingY={3}
sizing="border"
style={{width: 100}}
>
{documentsMetadata.updatedAt && (
<Text muted size={1}>
<RelativeTime time={documentsMetadata.updatedAt} useTemporalPhrase minimal />
</Text>
)}
</Flex>
{/* Published */}
<Flex as="td" align="center" paddingX={2} paddingY={3} sizing="border" style={{width: 100}}>
{!!bundle.publishedAt && (
Expand All @@ -48,7 +86,7 @@ export function BundleRow({bundle}: Props) {
</Flex>
{/* Actions */}
<Flex as="td" align="center" flex="none" padding={3}>
<BundleMenuButton bundle={bundle} />
<BundleMenuButton bundle={bundle} documentCount={bundle.documentsMetadata.documentCount} />
</Flex>
</Card>
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import {useMemo} from 'react'
import {styled} from 'styled-components'

import {type BundleDocument} from '../../../store/bundles/types'
import {BundleHeader, type BundleHeaderProps} from './BundleHeader'
import {BundleRow} from './BundleRow'
import {type BundlesMetadata} from '../../tool/useBundlesMetadata'
import {ReleaseHeader, type ReleaseHeaderProps} from './ReleaseHeader'
import {ReleaseRow} from './ReleaseRow'

const RowStack = styled(Stack)({
'& > *:not(:first-child)': {
Expand All @@ -19,11 +20,15 @@ const RowStack = styled(Stack)({
},
})

interface BundlesTableProps extends Omit<BundleHeaderProps, 'searchDisabled'> {
bundles: BundleDocument[]
export interface TableBundle extends BundleDocument {
documentsMetadata: BundlesMetadata
}

export function BundlesTable({bundles, searchTerm, setSearchTerm}: BundlesTableProps) {
interface ReleasesTableProps extends Omit<ReleaseHeaderProps, 'searchDisabled'> {
bundles: TableBundle[]
}

export function ReleasesTable({bundles, searchTerm, setSearchTerm}: ReleasesTableProps) {
const tableContent = useMemo(() => {
if (bundles.length === 0) {
return (
Expand All @@ -44,12 +49,12 @@ export function BundlesTable({bundles, searchTerm, setSearchTerm}: BundlesTableP
)
}

return bundles.map((bundle) => <BundleRow key={bundle.name} bundle={bundle} />)
return bundles.map((bundle) => <ReleaseRow key={bundle.name} bundle={bundle} />)
}, [bundles])

return (
<Stack as="table" space={1}>
<BundleHeader
<ReleaseHeader
searchDisabled={!searchTerm && !bundles.length}
searchTerm={searchTerm}
setSearchTerm={setSearchTerm}
Expand Down
Loading

0 comments on commit 68333d9

Please sign in to comment.