Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,28 @@ def folder_layout(folder)
{
ROOT: {
type: 'div',
nodes: %w[TEXT PUBLISHED_PROJECTS],
nodes: %w[TITLE TEXT PUBLISHED_PROJECTS],
props: { id: 'e2e-content-builder-frame' },
custom: {},
hidden: false,
isCanvas: true,
displayName: 'div',
linkedNodes: {}
},
PUBLISHED_PROJECTS: {
type: { resolvedName: 'Published' },
TITLE: {
type: { resolvedName: 'FolderTitle' },
nodes: [],
props: {
folderId: folder.id,
titleMultiloc: MultilocService.new.i18n_to_multiloc('projects.published_projects')
props: { folderId: folder.id },
custom: {
title: {
id: 'app.containers.admin.ContentBuilder.folderTitle',
defaultMessage: 'Folder title'
}
},
custom: {},
hidden: false,
parent: 'ROOT',
isCanvas: false,
displayName: 'Published',
displayName: 'TextMultiloc',
linkedNodes: {}
},
TEXT: {
Expand All @@ -57,6 +59,20 @@ def folder_layout(folder)
isCanvas: false,
displayName: 'TextMultiloc',
linkedNodes: {}
},
PUBLISHED_PROJECTS: {
type: { resolvedName: 'Published' },
nodes: [],
props: {
folderId: folder.id,
titleMultiloc: MultilocService.new.i18n_to_multiloc('projects.published_projects')
},
custom: {},
hidden: false,
parent: 'ROOT',
isCanvas: false,
displayName: 'Published',
linkedNodes: {}
}
}
end
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import React from 'react';

import { Box, Spinner, Title } from '@citizenlab/cl2-component-library';
import { Box, Spinner } from '@citizenlab/cl2-component-library';
import { isEmpty } from 'lodash-es';
import { Multiloc } from 'typings';

import useContentBuilderLayout from 'api/content_builder/useContentBuilderLayout';

import useLocalize from 'hooks/useLocalize';

import { IMAGES_LOADED_EVENT } from 'components/admin/ContentBuilder/constants';
import ContentBuilderFrame from 'components/admin/ContentBuilder/Frame';
import Editor from 'components/DescriptionBuilder/Editor';
Expand All @@ -24,11 +22,7 @@ const handleLoadImages = () => {
eventEmitter.emit(IMAGES_LOADED_EVENT);
};

const FolderContentViewer = ({
folderId,
folderTitle,
}: FolderContentViewerProps) => {
const localize = useLocalize();
const FolderContentViewer = ({ folderId }: FolderContentViewerProps) => {
const { data: descriptionBuilderLayout, isInitialLoading } =
useContentBuilderLayout('folder', folderId);

Expand All @@ -49,9 +43,6 @@ const FolderContentViewer = ({
<Spinner />
) : (
<Box data-testid="descriptionBuilderFolderPreviewContent">
<Title color="tenantText" variant="h1">
{localize(folderTitle)}
</Title>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jamesspeake I'm not sure about making this an optional widget in the content builder 🤔 If they forget or choose not to add it, I think we end up with a page with bad accessibility/incorrect html hierarchy right? Since we won't have an h1 title?

Or maybe I've misunderstood how this works?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would indeed be possible to not have the project title in the page, but it felt odd laying out the rest of the page without having the title as part of the layout. Kind of why I added it as a separate PR as I was not totally sure. Good point about accessibility, but this is also possible on the homepage builder already.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point about the homepage builder - in that case, I think this is fine then indeed 👍

<Box id={`project-folder-description-${folderId}`} mb="24px">
<Editor isPreview={true}>
<ContentBuilderFrame
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ import WhiteSpace from 'components/admin/ContentBuilder/Widgets/WhiteSpace';
import FolderFiles, {
folderFilesTitle,
} from 'components/DescriptionBuilder/Widgets/FolderFiles';
import FolderTitle, {
folderTitleTitle,
} from 'components/DescriptionBuilder/Widgets/FolderTitle';
import InfoWithAccordions from 'components/DescriptionBuilder/Widgets/InfoWithAccordions';

import {
Expand Down Expand Up @@ -66,6 +69,12 @@ const FolderDescriptionBuilderToolbox = ({
"
>
<Section>
<DraggableElement
id="e2e-draggable-folder-title"
component={<FolderTitle folderId={folderId} />}
icon="text"
label={formatMessage(folderTitleTitle)}
/>
<DraggableElement
id="e2e-draggable-published"
component={
Expand Down
2 changes: 2 additions & 0 deletions front/app/components/DescriptionBuilder/Editor/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import ThreeColumn from 'components/admin/ContentBuilder/Widgets/ThreeColumn';
import TwoColumn from 'components/admin/ContentBuilder/Widgets/TwoColumn';
import WhiteSpace from 'components/admin/ContentBuilder/Widgets/WhiteSpace';
import FolderFiles from 'components/DescriptionBuilder/Widgets/FolderFiles';
import FolderTitle from 'components/DescriptionBuilder/Widgets/FolderTitle';

import InfoWithAccordions from '.././Widgets/InfoWithAccordions';

Expand Down Expand Up @@ -57,6 +58,7 @@ const Editor: React.FC<EditorProps> = ({
Spotlight,
Selection,
FolderFiles,
FolderTitle,
}}
isPreview={isPreview}
onNodesChange={onNodesChange}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import React from 'react';

import { Title } from '@citizenlab/cl2-component-library';
import { UserComponent } from '@craftjs/core';

import useProjectFolderById from 'api/project_folders/useProjectFolderById';

import useLocalize from 'hooks/useLocalize';

import useCraftComponentDefaultPadding from 'components/admin/ContentBuilder/useCraftComponentDefaultPadding';

import messages from './messages';

interface Props {
folderId: string;
}
const FolderTitle: UserComponent = ({ folderId }: Props) => {
const localize = useLocalize();
const { data: projectFolder } = useProjectFolderById(folderId);
const craftComponentDefaultPadding = useCraftComponentDefaultPadding();

if (!projectFolder) {
return null;
}

return (
<Title color="tenantText" variant="h1" px={craftComponentDefaultPadding}>
{localize(projectFolder.data.attributes.title_multiloc)}
</Title>
);
};

FolderTitle.craft = {
custom: {
title: messages.folderTitle,
},
};

export const folderTitleTitle = messages.folderTitle;

export default FolderTitle;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { defineMessages } from 'react-intl';

export default defineMessages({
folderTitle: {
id: 'app.containers.admin.ContentBuilder.folderTitle',
defaultMessage: 'Folder title',
},
});
8 changes: 5 additions & 3 deletions front/app/containers/DescriptionBuilder/FullScreenPreview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,11 @@ export const FullScreenPreview = ({
contentBuilderLocale={selectedLocale}
>
<FullScreenWrapper onUpdateDraftData={setDraftData} padding="0px">
<Title color="tenantText" variant="h1" px="20px">
{localize(titleMultiloc)}
</Title>
{contentBuildableType === 'project' && (
<Title color="tenantText" variant="h1" px="20px">
{localize(titleMultiloc)}
</Title>
)}
{isLoadingProjectDescriptionBuilderLayout && <Spinner />}
{!isLoadingProjectDescriptionBuilderLayout && editorData && (
<Box>
Expand Down
1 change: 1 addition & 0 deletions front/app/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2032,6 +2032,7 @@
"app.containers.VoteControl.voteErrorTitle": "Something went wrong",
"app.containers.admin.ContentBuilder.default": "default",
"app.containers.admin.ContentBuilder.folderFiles": "Folder files",
"app.containers.admin.ContentBuilder.folderTitle": "Folder title",
"app.containers.admin.ContentBuilder.imageTextCards": "Image & text cards",
"app.containers.admin.ContentBuilder.infoWithAccordions": "Info & accordions",
"app.containers.admin.ContentBuilder.oneColumnLayout": "1 column",
Expand Down