From 4f1a77c2af7545451ac46776d9e5c57f52412cf6 Mon Sep 17 00:00:00 2001 From: jo-inge-arnes Date: Fri, 29 Dec 2023 13:27:47 +0100 Subject: [PATCH] Added logic for publishedAt and publishedBy --- .../InformationBoxStringsContext.js | 5 ++++ .../src/components/InformationBox/index.tsx | 25 ++++++++++++++----- .../components/AtlasFrontPageFields/index.js | 12 +++++++++ .../admin/src/pages/EditPage/index.js | 23 +++++++++++++++++ .../admin/src/translations/en.json | 1 + .../admin/src/translations/no.json | 1 + .../content-types/health-atlas/schema.js | 8 ++++++ .../server/services/atlas-editor-service.js | 16 +++++++++--- apps/strapi/types/generated/contentTypes.d.ts | 2 ++ 9 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/components/AtlasFrontPageFields/index.js diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/InformationBoxStringsContext.js b/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/InformationBoxStringsContext.js index 3b5b2c8897..b8f0d9ae84 100644 --- a/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/InformationBoxStringsContext.js +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/InformationBoxStringsContext.js @@ -24,6 +24,11 @@ export class InformationBoxStrings { id: getTrad("Component.Information.lastUpdate"), defaultMessage: "Last update", }); + + this.publishedAt = formatMessage({ + id: getTrad("Component.Information.publishedAt"), + defaultMessage: "Last published", + }); } } diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/index.tsx b/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/index.tsx index fdb8bca8f1..080aee2d8c 100644 --- a/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/index.tsx +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/components/InformationBox/index.tsx @@ -57,6 +57,14 @@ const Body = ({ atlas }) => { const { initialData, isCreatingEntry } = useCMEditViewDataManager(); const currentTime = React.useRef(Date.now()); + const formatDate = (at) => { + const timestamp = at ? new Date(at).getTime() : Date.now(); + const elapsed = timestamp - currentTime.current; + const { unit, value } = getUnits(-elapsed); + + return formatRelativeTime(value, unit, { numeric: "auto" }); + }; + const getFieldInfo = ( atlas, atField: "updatedAt" | "createdAt", @@ -66,12 +74,9 @@ const Body = ({ atlas }) => { const at = atlas[atField]; const displayName = user ? `${user.firstname} ${user.lastname}` : "-"; - const timestamp = at ? new Date(at).getTime() : Date.now(); - const elapsed = timestamp - currentTime.current; - const { unit, value } = getUnits(-elapsed); return { - at: formatRelativeTime(value, unit, { numeric: "auto" }), + at: formatDate(at), by: isCreatingEntry ? "-" : displayName, }; }; @@ -83,15 +88,23 @@ const Body = ({ atlas }) => { - - + + {atlas?.publishedAt && ( + + + + + )} ); }; diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/components/AtlasFrontPageFields/index.js b/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/components/AtlasFrontPageFields/index.js new file mode 100644 index 0000000000..161c899742 --- /dev/null +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/components/AtlasFrontPageFields/index.js @@ -0,0 +1,12 @@ +import React from "react"; +import { Typography } from "@strapi/design-system"; + +const AtlasFrontPageFields = () => { + return ( + + Atlas Front Page + + ); +}; + +export default AtlasFrontPageFields; diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/index.js b/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/index.js index b8d9ed7963..7cbf8d670d 100644 --- a/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/index.js +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/pages/EditPage/index.js @@ -32,9 +32,11 @@ import EditorPageStringsContext, { import { getAtlas, updateAtlas } from "../../api/atlas-editor"; import InformationBox from "../../components/InformationBox"; import EditTitleModal from "./components/EditTitleModal"; +import AtlasFrontPageFields from "./components/AtlasFrontPageFields"; import pluginId from "../../pluginId"; import { EditAtlasNav } from "./components/EditAtlasNav"; import { areDifferent, findDiff } from "./utils/differences"; +import { update } from "lodash"; const emptyAtlas = { id: -1, @@ -43,12 +45,15 @@ const emptyAtlas = { isPublished: false, createdAt: new Date(), updatedAt: new Date(), + publishedAt: null, }; const EditPage = () => { const handleUpdateAtlas = async (atlas) => { setIsLoading(true); + updatePublishedInfo(atlas); + const { updateSuccess, err, updatedContent } = await updateAtlas( atlas.current, ); @@ -68,6 +73,12 @@ const EditPage = () => { setIsLoading(false); }; + const updatePublishedInfo = (atlas) => { + if (atlas.current.isPublished && !atlas.original.isPublished) { + atlas.current.updatePublishedInfo = true; + } + }; + const handleFieldChange = (fieldName, value) => { const updatedCurrentAtlas = { ...atlas.current, [fieldName]: value }; @@ -185,6 +196,18 @@ const EditPage = () => { } /> + + + diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/translations/en.json b/apps/strapi/src/plugins/atlas-editor/admin/src/translations/en.json index 71feb1320e..ac64bbf5b3 100644 --- a/apps/strapi/src/plugins/atlas-editor/admin/src/translations/en.json +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/translations/en.json @@ -35,6 +35,7 @@ "Component.Information.by": "By", "Component.Information.lastUpdate": "Last update", "Component.Information.information": "Information", + "Component.Information.publishedAt": "Last published", "Editpage.Form.isPublished": "Is published", "Editpage.Form.yes": "Yes", "Editpage.Form.no": "No", diff --git a/apps/strapi/src/plugins/atlas-editor/admin/src/translations/no.json b/apps/strapi/src/plugins/atlas-editor/admin/src/translations/no.json index 9b2c017a02..178687976d 100644 --- a/apps/strapi/src/plugins/atlas-editor/admin/src/translations/no.json +++ b/apps/strapi/src/plugins/atlas-editor/admin/src/translations/no.json @@ -38,6 +38,7 @@ "Component.Information.by": "Av", "Component.Information.lastUpdate": "Sist oppdatert", "Component.Information.information": "Informasjon", + "Component.Information.publishedAt": "Sist publisert", "Editpage.Form.isPublished": "Er publisert", "Editpage.Form.yes": "Ja", "Editpage.Form.no": "Nei", diff --git a/apps/strapi/src/plugins/atlas-editor/server/content-types/health-atlas/schema.js b/apps/strapi/src/plugins/atlas-editor/server/content-types/health-atlas/schema.js index 13c7ae989a..06993baa01 100644 --- a/apps/strapi/src/plugins/atlas-editor/server/content-types/health-atlas/schema.js +++ b/apps/strapi/src/plugins/atlas-editor/server/content-types/health-atlas/schema.js @@ -28,6 +28,14 @@ module.exports = { type: "boolean", default: false, }, + publishedAt: { + type: "datetime", + default: null, + }, + publishedBy: { + type: "string", + required: false, + }, mainTitle: { type: "string", required: true, diff --git a/apps/strapi/src/plugins/atlas-editor/server/services/atlas-editor-service.js b/apps/strapi/src/plugins/atlas-editor/server/services/atlas-editor-service.js index 0e7c5e0a3c..8a9dccd95a 100644 --- a/apps/strapi/src/plugins/atlas-editor/server/services/atlas-editor-service.js +++ b/apps/strapi/src/plugins/atlas-editor/server/services/atlas-editor-service.js @@ -4,14 +4,16 @@ const atlas = require("../../../../api/atlas/controllers/atlas"); const populateParams = { id: true, - isPublished: true, mainTitle: true, shortTitle: true, frontPageText: true, - createdAt: true, - updatedAt: true, locale: true, + isPublished: true, + publishedAt: true, + publishedBy: true, + createdAt: true, createdBy: true, + updatedAt: true, updatedBy: true, }; @@ -56,15 +58,21 @@ module.exports = ({ strapi }) => ({ async update(ctx) { const atlas = ctx.request.body; const userInfo = ctx.state.user; - const atlasCleaned = { + let atlasCleaned = { id: atlas.id, isPublished: atlas.isPublished, + publishedAt: atlas.publishedAt, mainTitle: atlas.mainTitle, shortTitle: atlas.shortTitle, frontPageText: atlas.frontPageText, updatedBy: userInfo.id, }; + if (atlas.updatePublishedInfo) { + atlasCleaned.publishedBy = `${userInfo.firstname} ${userInfo.lastname}`; + atlasCleaned.publishedAt = new Date(); + } + let updateResult = await strapi.entityService.update( "plugin::atlas-editor.health-atlas", atlas.id, diff --git a/apps/strapi/types/generated/contentTypes.d.ts b/apps/strapi/types/generated/contentTypes.d.ts index bc9053c9cb..ed3ec29f60 100644 --- a/apps/strapi/types/generated/contentTypes.d.ts +++ b/apps/strapi/types/generated/contentTypes.d.ts @@ -508,6 +508,8 @@ export interface PluginAtlasEditorHealthAtlas extends Schema.CollectionType { }; attributes: { isPublished: Attribute.Boolean & Attribute.DefaultTo; + publishedAt: Attribute.DateTime; + publishedBy: Attribute.String; mainTitle: Attribute.String & Attribute.Required; shortTitle: Attribute.String & Attribute.Required; frontPageText: Attribute.Text & Attribute.Required;