From df2587810ce493108a38c00cd2b7f78340c56fc5 Mon Sep 17 00:00:00 2001 From: Rijk van Zanten Date: Fri, 22 May 2020 15:45:35 -0400 Subject: [PATCH] Revisions flow (#612) * WIP rework revisions, fetch data * Render revision items in sidebar * Show created externally * Install diff * Add strings for revisions modal * Allow slot to override subtitle in modal * Add tabs content to revisions modal * Add revert button --- package.json | 2 + src/components/v-modal/v-modal.vue | 4 +- src/lang/en-US/index.json | 7 + src/layouts/tabular/tabular.vue | 6 +- .../collections/routes/detail/detail.vue | 3 + .../revisions-drawer-detail/revision-item.vue | 163 +++++++ .../revisions-drawer-detail.vue | 414 ++++++------------ .../revisions-modal-current.vue | 0 .../revisions-modal-picker.vue | 107 +++++ .../revisions-modal-preview.vue | 22 + .../revisions-modal-updates-change.vue | 104 +++++ .../revisions-modal-updates.vue | 95 ++++ .../revisions-modal.vue | 147 +++++++ .../revisions-drawer-detail/types.ts | 26 ++ yarn.lock | 7 +- 15 files changed, 826 insertions(+), 281 deletions(-) create mode 100644 src/views/private/components/revisions-drawer-detail/revision-item.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal-current.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal-picker.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal-preview.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal-updates-change.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal-updates.vue create mode 100644 src/views/private/components/revisions-drawer-detail/revisions-modal.vue create mode 100644 src/views/private/components/revisions-drawer-detail/types.ts diff --git a/package.json b/package.json index c1a6f1b8e2..1e1cda64e5 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "base-64": "^0.1.0", "cropperjs": "^1.5.6", "date-fns": "^2.14.0", + "diff": "^4.0.2", "lodash": "^4.17.15", "marked": "^1.1.0", "micromustache": "^7.1.0", @@ -57,6 +58,7 @@ "@storybook/core": "^5.3.18", "@storybook/vue": "^5.3.18", "@types/base-64": "^0.1.3", + "@types/diff": "^4.0.2", "@types/jest": "^25.2.3", "@types/marked": "^0.7.4", "@types/mime-types": "^2.1.0", diff --git a/src/components/v-modal/v-modal.vue b/src/components/v-modal/v-modal.vue index e98fad56f8..a3a80e0cef 100644 --- a/src/components/v-modal/v-modal.vue +++ b/src/components/v-modal/v-modal.vue @@ -8,7 +8,9 @@

{{ title }}

-

{{ subtitle }}

+ +

{{ subtitle }}

+
diff --git a/src/lang/en-US/index.json b/src/lang/en-US/index.json index 7bcc1f6735..f4a8672664 100644 --- a/src/lang/en-US/index.json +++ b/src/lang/en-US/index.json @@ -1,5 +1,6 @@ { "edit_field": "Edit Field", + "item_revision": "Item Revision", "duplicate_field": "Duplicate Field", "half_width": "Half Width", "full_width": "Full Width", @@ -68,6 +69,8 @@ "show_all_activity": "Show All Activity", "page_not_found": "Page Not Found", "page_not_found_body": "The page you are looking for doesn't seem to exist.", + "confirm_revert": "Confirm Revert", + "confirm_revert_body": "This will revert the item to the selected state.", "setting_update_success": "Setting {setting} updated", "setting_update_failed": "Updating setting {setting} failed", @@ -79,8 +82,12 @@ "revision_delta_updated": "Updated {count} Fields", "revision_delta_soft_deleted": "Soft Deleted", "revision_delta_deleted": "Deleted", + "revision_delta_reverted": "Reverted", + "revision_delta_by": "{date} by {user}", "private_user": "Private User", "revision_unknown": "Created Outside System", + "revision_preview": "Revision Preview", + "updates_made": "Updates Made", "leave_comment": "Leave a comment...", "post_comment_success": "Comment posted", diff --git a/src/layouts/tabular/tabular.vue b/src/layouts/tabular/tabular.vue index 3423da471e..c19c9157b2 100644 --- a/src/layouts/tabular/tabular.vue +++ b/src/layouts/tabular/tabular.vue @@ -295,7 +295,11 @@ export default defineComponent({ }); const activeFilterCount = computed(() => { - return _filters.value.filter((filter) => !filter.locked); + let count = _filters.value.filter((filter) => !filter.locked).length; + + if (searchQuery.value && searchQuery.value.length > 0) count++; + + return count; }); return { diff --git a/src/modules/collections/routes/detail/detail.vue b/src/modules/collections/routes/detail/detail.vue index 63eda9f253..0827eeb7dd 100644 --- a/src/modules/collections/routes/detail/detail.vue +++ b/src/modules/collections/routes/detail/detail.vue @@ -148,6 +148,7 @@ :collection="collection" :primary-key="primaryKey" ref="revisionsDrawerDetail" + @revert="refresh" /> (() => Object.keys(edits.value).length > 0); @@ -273,6 +275,7 @@ export default defineComponent({ breadcrumb, title, revisionsDrawerDetail, + refresh, }; function useBreadcrumb() { diff --git a/src/views/private/components/revisions-drawer-detail/revision-item.vue b/src/views/private/components/revisions-drawer-detail/revision-item.vue new file mode 100644 index 0000000000..487a786dbd --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revision-item.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue b/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue index e3be43cec7..0e79a41979 100644 --- a/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue +++ b/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue @@ -1,84 +1,52 @@ diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal-current.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal-current.vue new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal-picker.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal-picker.vue new file mode 100644 index 0000000000..2f9d9d2ac2 --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revisions-modal-picker.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal-preview.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal-preview.vue new file mode 100644 index 0000000000..13f97a0286 --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revisions-modal-preview.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal-updates-change.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal-updates-change.vue new file mode 100644 index 0000000000..19edc874ea --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revisions-modal-updates-change.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal-updates.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal-updates.vue new file mode 100644 index 0000000000..caf2cc5a0b --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revisions-modal-updates.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/private/components/revisions-drawer-detail/revisions-modal.vue b/src/views/private/components/revisions-drawer-detail/revisions-modal.vue new file mode 100644 index 0000000000..10a153e061 --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/revisions-modal.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/views/private/components/revisions-drawer-detail/types.ts b/src/views/private/components/revisions-drawer-detail/types.ts new file mode 100644 index 0000000000..e0d9b1f7d9 --- /dev/null +++ b/src/views/private/components/revisions-drawer-detail/types.ts @@ -0,0 +1,26 @@ +export type Revision = { + id: number; + data: Record; + delta: Record; + collection: string; + item: string | number; + activity: { + action: string; + ip: string; + user_agent: string; + action_on: string; + action_by: + | number + | { + id: number; + first_name: string; + last_name: string; + }; + }; +}; + +export type RevisionsByDate = { + date: Date; + dateFormatted: string; + revisions: Revision[]; +}; diff --git a/yarn.lock b/yarn.lock index 218caa0282..11509befe4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1914,6 +1914,11 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== +"@types/diff@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-4.0.2.tgz#2e9bb89f9acc3ab0108f0f3dc4dbdcf2fff8a99c" + integrity sha512-mIenTfsIe586/yzsyfql69KRnA75S8SVXQbTLpDejRrjH0QSJcpu3AUOi/Vjnt9IOsXKxPhJfGpQUNMueIU1fQ== + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -5506,7 +5511,7 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff@^4.0.1: +diff@^4.0.1, diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==