Skip to content

Commit 894f8e5

Browse files
committed
feat: edit page template
1 parent 03d4aef commit 894f8e5

17 files changed

Lines changed: 316 additions & 134 deletions

src/actions/page-template-actions.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
DEFAULT_CURRENT_PAGE,
3030
DEFAULT_ORDER_DIR,
3131
DEFAULT_PER_PAGE,
32+
PAGE_MODULES_DOWNLOAD,
3233
PAGES_MODULE_KINDS
3334
} from "../utils/constants";
3435
import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions";
@@ -48,7 +49,7 @@ export const PAGE_TEMPLATE_UNARCHIVED = "PAGE_TEMPLATE_UNARCHIVED";
4849

4950
export const getPageTemplates =
5051
(
51-
term = null,
52+
term = "",
5253
page = DEFAULT_CURRENT_PAGE,
5354
perPage = DEFAULT_PER_PAGE,
5455
order = "id",
@@ -106,7 +107,7 @@ export const getPageTemplate = (formTemplateId) => async (dispatch) => {
106107

107108
const params = {
108109
access_token: accessToken,
109-
expand: "materials,meta_fields,meta_fields.values"
110+
expand: "modules"
110111
};
111112

112113
return getRequest(
@@ -160,8 +161,14 @@ const normalizeEntity = (entity) => {
160161
module.file_type_id?.value || module.file_type_id;
161162
}
162163

163-
if (module.kind === PAGES_MODULE_KINDS.DOCUMENT && module.file) {
164-
normalizedModule.file = module.file[0] || null;
164+
if (module.kind === PAGES_MODULE_KINDS.DOCUMENT) {
165+
if (module.type === PAGE_MODULES_DOWNLOAD.FILE) {
166+
normalizedModule.file = module.file[0] || null;
167+
delete normalizedModule.external_url;
168+
} else {
169+
delete normalizedModule.file;
170+
delete normalizedModule.file_id;
171+
}
165172
}
166173

167174
delete normalizedModule._tempId;

src/components/forms/media-upload-form.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import React from "react";
1515
import T from "i18n-react/dist/i18n-react";
1616
import "awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css";
17-
import { Input, Dropdown } from "openstack-uicore-foundation/lib/components";
17+
import { Dropdown, Input } from "openstack-uicore-foundation/lib/components";
1818
import TextEditorV3 from "openstack-uicore-foundation/lib/components/inputs/editor-input-v3";
1919
import { isEmpty, scrollToError, shallowEqual } from "../../utils/methods";
2020

@@ -103,6 +103,11 @@ class MediaUploadForm extends React.Component {
103103
.filter((t) => t.class_name === "PresentationType")
104104
.map((t) => ({ value: t.id, label: t.name }));
105105

106+
const mediaFileTypesDDL = mediaFileTypes.map((mft) => ({
107+
value: mft.id,
108+
label: mft.name
109+
}));
110+
106111
return (
107112
<form className="media-upload-form">
108113
<input type="hidden" id="id" value={entity.id} />
@@ -183,7 +188,7 @@ class MediaUploadForm extends React.Component {
183188
className="right-space"
184189
value={entity.type_id}
185190
placeholder={T.translate("media_upload.placeholders.select_type")}
186-
options={mediaFileTypes}
191+
options={mediaFileTypesDDL}
187192
onChange={this.handleChange}
188193
/>
189194
</div>

src/components/inputs/formik-text-editor.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
import React from "react";
22
import TextEditorV3 from "openstack-uicore-foundation/lib/components/inputs/editor-input-v3";
3-
import { useFormikContext } from "formik";
3+
import { useField } from "formik";
44
import normalizeHtmlString from "../../utils/normalize-html-string";
55

66
const FormikTextEditor = ({ name, ...props }) => {
7-
const { values, errors, touched, setFieldValue, setFieldTouched } =
8-
useFormikContext();
7+
const [field, meta, helpers] = useField(name);
98

109
return (
1110
<TextEditorV3
1211
name={name}
1312
id={name}
14-
value={values[name]}
13+
value={field.value}
1514
onChange={(e) => {
1615
const stringValue = normalizeHtmlString(e.target.value);
17-
setFieldValue(name, stringValue);
16+
helpers.setValue(stringValue);
1817
}}
19-
onBlur={() => setFieldTouched(name, true)}
20-
error={touched?.[name] && errors?.[name] ? errors?.[name] : ""}
18+
error={meta.touched && meta.error}
2119
license={process.env.JODIT_LICENSE_KEY}
2220
{...props}
2321
/>

src/components/mui/formik-inputs/mui-formik-datepicker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const MuiFormikDatepicker = ({ name, label, required, ...props }) => {
4545

4646
MuiFormikDatepicker.propTypes = {
4747
name: PropTypes.string.isRequired,
48-
label: PropTypes.string.isRequired,
48+
label: PropTypes.string,
4949
required: PropTypes.bool
5050
};
5151

src/components/mui/formik-inputs/mui-formik-upload.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
const MuiFormikUpload = ({
1313
id,
1414
name,
15-
onImageDeleted,
15+
onDelete,
1616
maxFiles = MAX_INVENTORY_IMAGES_UPLOAD_QTY
1717
}) => {
1818
const [field, meta, helpers] = useField(name);
@@ -59,8 +59,8 @@ const MuiFormikUpload = ({
5959
(i) => i.filename !== imageFile.name
6060
);
6161
helpers.setValue(updated);
62-
if (onImageDeleted) {
63-
onImageDeleted(imageFile.id);
62+
if (onDelete) {
63+
onDelete(imageFile.id);
6464
}
6565
};
6666

@@ -91,7 +91,7 @@ const MuiFormikUpload = ({
9191
MuiFormikUpload.propTypes = {
9292
id: PropTypes.string,
9393
name: PropTypes.string.isRequired,
94-
onImageDeleted: PropTypes.func,
94+
onDelete: PropTypes.func,
9595
maxFiles: PropTypes.number
9696
};
9797

src/i18n/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3969,6 +3969,7 @@
39693969
"external_url": "External URL",
39703970
"upload_file": "Upload File",
39713971
"text_input": "Text input",
3972+
"input_url_link": "Input URL Link",
39723973
"media_module": "Media Request Module",
39733974
"name": "Name",
39743975
"upload_deadline": "Upload Deadline",

src/pages/sponsors-global/page-templates/page-template-list-page.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ import { connect } from "react-redux";
2626
import T from "i18n-react/dist/i18n-react";
2727
import {
2828
archivePageTemplate,
29+
deletePageTemplate,
2930
getPageTemplates,
31+
getPageTemplate,
3032
savePageTemplate,
31-
deletePageTemplate,
3233
unarchivePageTemplate
3334
} from "../../../actions/page-template-actions";
3435
import MuiTable from "../../../components/mui/table/mui-table";
@@ -47,6 +48,7 @@ const PageTemplateListPage = ({
4748
hideArchived,
4849
totalPageTemplates,
4950
getPageTemplates,
51+
getPageTemplate,
5052
archivePageTemplate,
5153
unarchivePageTemplate,
5254
savePageTemplate,
@@ -118,7 +120,7 @@ const PageTemplateListPage = ({
118120
: archivePageTemplate(item.id);
119121

120122
const handleEdit = (row) => {
121-
console.log("EDIT", row);
123+
getPageTemplate(row.id).then(() => setPageTemplateId(row.id));
122124
};
123125

124126
const handleDelete = (row) => {
@@ -283,6 +285,7 @@ const mapStateToProps = ({ pageTemplateListState }) => ({
283285

284286
export default connect(mapStateToProps, {
285287
getPageTemplates,
288+
getPageTemplate,
286289
archivePageTemplate,
287290
unarchivePageTemplate,
288291
savePageTemplate,

src/pages/sponsors-global/page-templates/page-template-popup/index.js

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,22 @@ import { FormikProvider, useFormik } from "formik";
2020
import * as yup from "yup";
2121
import MuiFormikTextField from "../../../../components/mui/formik-inputs/mui-formik-textfield";
2222
import PageModules from "./page-template-modules-form";
23+
import { resetPageTemplateForm } from "../../../../actions/page-template-actions";
2324
import {
2425
PAGES_MODULE_KINDS,
25-
PAGE_MODULES_MEDIA_TYPES
26+
PAGE_MODULES_MEDIA_TYPES,
27+
PAGE_MODULES_DOWNLOAD
2628
} from "../../../../utils/constants";
2729

28-
const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
30+
const PageTemplatePopup = ({
31+
pageTemplate,
32+
open,
33+
onClose,
34+
onSave,
35+
resetPageTemplateForm
36+
}) => {
2937
const handleClose = () => {
38+
resetPageTemplateForm();
3039
onClose();
3140
};
3241

@@ -78,8 +87,16 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
7887
kind: yup.string().equals([PAGES_MODULE_KINDS.DOCUMENT]),
7988
name: yup.string().required(T.translate("validation.required")),
8089
description: yup.string().required(T.translate("validation.required")),
81-
external_url: yup.string(),
82-
file: yup.array().min(1, T.translate("validation.file_required"))
90+
external_url: yup.string().when("type", {
91+
is: PAGE_MODULES_DOWNLOAD.URL,
92+
then: (schema) => schema.required(T.translate("validation.required")),
93+
otherwise: (schema) => schema.nullable()
94+
}),
95+
file: yup.array().when("type", {
96+
is: PAGE_MODULES_DOWNLOAD.FILE,
97+
then: (schema) => schema.min(1, T.translate("validation.file_required")),
98+
otherwise: (schema) => schema.nullable()
99+
})
83100
});
84101

85102
const mediaModuleSchema = yup.object().shape({
@@ -88,7 +105,7 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
88105
type: yup.string().required(T.translate("validation.required")),
89106
upload_deadline: yup.date().required(T.translate("validation.required")),
90107
description: yup.string().required(T.translate("validation.required")),
91-
file_type_id: yup.object().when("type", {
108+
file_type_id: yup.number().when("type", {
92109
is: PAGE_MODULES_MEDIA_TYPES.FILE,
93110
then: (schema) => schema.required(T.translate("validation.required")),
94111
otherwise: (schema) => schema.nullable()
@@ -124,6 +141,7 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
124141
...m,
125142
custom_order: idx
126143
}));
144+
127145
onSave({ ...values, modules: modulesWithOrder });
128146
}
129147
});
@@ -148,24 +166,24 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
148166
>
149167
<DialogContent sx={{ p: 0 }}>
150168
<Grid2 container spacing={2} size={12} sx={{ p: 2 }}>
151-
<Grid2 spacing={2} size={4}>
169+
<Grid2 size={4}>
152170
<MuiFormikTextField
153171
name="code"
154172
label={T.translate("page_template_list.code")}
155173
fullWidth
156174
/>
157175
</Grid2>
158-
<Grid2 spacing={2} size={8}>
176+
<Grid2 size={8}>
159177
<MuiFormikTextField
160178
name="name"
161179
label={T.translate("page_template_list.name")}
162180
fullWidth
163181
/>
164182
</Grid2>
165183
</Grid2>
166-
<Divider gutterBottom />
184+
<Divider sx={{ mb: 2 }} />
167185
<Grid2 container spacing={2} size={12} sx={{ p: 2 }}>
168-
<Grid2 spacing={2} size={4}>
186+
<Grid2 size={4}>
169187
<Button
170188
variant="contained"
171189
fullWidth
@@ -175,7 +193,7 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
175193
{T.translate("page_template_list.page_crud.add_info")}
176194
</Button>
177195
</Grid2>
178-
<Grid2 spacing={2} size={4}>
196+
<Grid2 size={4}>
179197
<Button
180198
variant="contained"
181199
fullWidth
@@ -185,7 +203,7 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
185203
{T.translate("page_template_list.page_crud.add_doc")}
186204
</Button>
187205
</Grid2>
188-
<Grid2 spacing={2} size={4}>
206+
<Grid2 size={4}>
189207
<Button
190208
variant="contained"
191209
fullWidth
@@ -196,7 +214,7 @@ const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => {
196214
</Button>
197215
</Grid2>
198216
</Grid2>
199-
<Divider gutterBottom />
217+
<Divider sx={{ mb: 2 }} />
200218
<Box sx={{ py: 2 }}>
201219
<PageModules name="modules" />
202220
</Box>
@@ -219,8 +237,10 @@ PageTemplatePopup.propTypes = {
219237
onSave: PropTypes.func.isRequired
220238
};
221239

222-
const mapStateToProps = ({ currentPageTemplateState }) => ({
223-
...currentPageTemplateState
240+
const mapStateToProps = ({ pageTemplateState }) => ({
241+
pageTemplate: pageTemplateState.entity
224242
});
225243

226-
export default connect(mapStateToProps, {})(PageTemplatePopup);
244+
export default connect(mapStateToProps, {
245+
resetPageTemplateForm
246+
})(PageTemplatePopup);

0 commit comments

Comments
 (0)