@selfcommunity/react-ui 0.7.50-event.30 → 0.7.50-events.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/Category/Category.d.ts +1 -1
- package/lib/cjs/components/Category/Category.js +1 -1
- package/lib/cjs/components/EventForm/EventForm.js +20 -7
- package/lib/cjs/components/Events/prefetchedEvents.d.ts +1 -1
- package/lib/cjs/components/Events/prefetchedEvents.js +4 -1
- package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/cjs/components/FeedObject/FeedObject.js +16 -4
- package/lib/cjs/constants/PubSub.d.ts +0 -6
- package/lib/esm/components/Category/Category.d.ts +1 -1
- package/lib/esm/components/Category/Category.js +1 -1
- package/lib/esm/components/EventForm/EventForm.js +20 -7
- package/lib/esm/components/Events/prefetchedEvents.d.ts +1 -1
- package/lib/esm/components/Events/prefetchedEvents.js +1 -1
- package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/esm/components/FeedObject/FeedObject.js +16 -4
- package/lib/esm/constants/PubSub.d.ts +0 -6
- package/lib/umd/react-ui.js +1 -1
- package/package.json +6 -6
|
@@ -72,7 +72,7 @@ function Category(inProps) {
|
|
|
72
72
|
// CONTEXT
|
|
73
73
|
const scRoutingContext = (0, react_core_1.useSCRouting)();
|
|
74
74
|
// STATE
|
|
75
|
-
const { scCategory } = (0, react_core_1.useSCFetchCategory)({ id: categoryId, category });
|
|
75
|
+
const { scCategory, setSCCategory } = (0, react_core_1.useSCFetchCategory)({ id: categoryId, category });
|
|
76
76
|
// MEMO
|
|
77
77
|
const _ButtonBaseProps = (0, react_1.useMemo)(() => (ButtonBaseProps ? ButtonBaseProps : { component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, scCategory) }), [ButtonBaseProps, scRoutingContext, scCategory]);
|
|
78
78
|
// HOOKS
|
|
@@ -128,7 +128,7 @@ function EventForm(inProps) {
|
|
|
128
128
|
startTime: null,
|
|
129
129
|
endDate: null,
|
|
130
130
|
endTime: null,
|
|
131
|
-
location:
|
|
131
|
+
location: types_1.SCEventLocationType.PERSON,
|
|
132
132
|
geolocation: '',
|
|
133
133
|
lat: null,
|
|
134
134
|
lng: null,
|
|
@@ -146,6 +146,7 @@ function EventForm(inProps) {
|
|
|
146
146
|
// PREFERENCES
|
|
147
147
|
const scPreferences = (0, react_core_1.useSCPreferences)();
|
|
148
148
|
const privateEnabled = (0, react_1.useMemo)(() => scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_PRIVATE_ENABLED].value, [scPreferences.preferences]);
|
|
149
|
+
const visibilityEnabled = (0, react_1.useMemo)(() => scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_VISIBILITY_ENABLED].value, [scPreferences.preferences]);
|
|
149
150
|
const _backgroundCover = Object.assign({}, (field.imageOriginal
|
|
150
151
|
? { background: `url('${field.imageOriginal}') center / cover` }
|
|
151
152
|
: { background: `url('${scPreferences.preferences[react_core_1.SCPreferences.IMAGES_USER_DEFAULT_COVER].value}') center / cover` }));
|
|
@@ -199,6 +200,9 @@ function EventForm(inProps) {
|
|
|
199
200
|
if (privateEnabled) {
|
|
200
201
|
formData.append('privacy', field.isPublic ? types_1.SCEventPrivacyType.PUBLIC : types_1.SCEventPrivacyType.PRIVATE);
|
|
201
202
|
}
|
|
203
|
+
if (visibilityEnabled) {
|
|
204
|
+
formData.append('visible', true);
|
|
205
|
+
}
|
|
202
206
|
formData.append('description', field.description);
|
|
203
207
|
api_services_1.EventService.createEvent(formData, { headers: { 'Content-Type': 'multipart/form-data' } })
|
|
204
208
|
.then((data) => {
|
|
@@ -207,7 +211,15 @@ function EventForm(inProps) {
|
|
|
207
211
|
setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
|
|
208
212
|
})
|
|
209
213
|
.catch((e) => {
|
|
210
|
-
|
|
214
|
+
const _error = (0, api_services_1.formatHttpErrorCode)(e);
|
|
215
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
|
|
216
|
+
// @ts-ignore
|
|
217
|
+
if (Object.values(_error)[0].error === 'unique') {
|
|
218
|
+
setError(Object.assign(Object.assign({}, error), { ['nameError']: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.name.error.unique", defaultMessage: "ui.eventForm.name.error.unique" }) }));
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
setError(Object.assign(Object.assign({}, error), _error));
|
|
222
|
+
}
|
|
211
223
|
setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
|
|
212
224
|
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
|
|
213
225
|
});
|
|
@@ -233,7 +245,8 @@ function EventForm(inProps) {
|
|
|
233
245
|
return (react_1.default.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.title", defaultMessage: "ui.eventForm.title" }), open: open, onClose: onClose, className: (0, classnames_1.default)(classes.root, className), actions: react_1.default.createElement(lab_1.LoadingButton, { loading: field.isSubmitting, disabled: !field.name ||
|
|
234
246
|
(!field.startDate && !field.startTime) ||
|
|
235
247
|
(field.location === types_1.SCEventLocationType.ONLINE && !field.link) ||
|
|
236
|
-
(
|
|
248
|
+
(field.location === types_1.SCEventLocationType.PERSON && !field.geolocation) ||
|
|
249
|
+
(field.recurring !== types_1.SCEventRecurrenceType.NEVER && !field.endDate && !field.endTime) ||
|
|
237
250
|
Object.keys(error).length !== 0 ||
|
|
238
251
|
field.name.length > Event_1.EVENT_TITLE_MAX_LENGTH ||
|
|
239
252
|
field.description.length > Event_1.EVENT_DESCRIPTION_MAX_LENGTH, variant: "contained", onClick: handleSubmit, color: "secondary" }, react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.button.create", defaultMessage: "ui.eventForm.button.create" })) }, rest),
|
|
@@ -243,7 +256,7 @@ function EventForm(inProps) {
|
|
|
243
256
|
react_1.default.createElement(material_1.FormGroup, { className: classes.form },
|
|
244
257
|
react_1.default.createElement(material_1.TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: field.name, name: "name", onChange: handleChange, InputProps: {
|
|
245
258
|
endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Event_1.EVENT_TITLE_MAX_LENGTH - field.name.length)
|
|
246
|
-
}, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > Event_1.EVENT_TITLE_MAX_LENGTH), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > Event_1.EVENT_TITLE_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.name.error.maxLength", defaultMessage: "ui.eventForm.name.error.maxLength" })) : null }),
|
|
259
|
+
}, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > Event_1.EVENT_TITLE_MAX_LENGTH) || Boolean(error[`nameError`]), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > Event_1.EVENT_TITLE_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.name.error.maxLength", defaultMessage: "ui.eventForm.name.error.maxLength" })) : error[`nameError`] ? (error[`nameError`]) : null }),
|
|
247
260
|
react_1.default.createElement(material_1.Box, { className: classes.dateTime },
|
|
248
261
|
react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { dateAdapter: AdapterDateFns_1.AdapterDateFns, adapterLocale: scContext.settings.locale.default === 'it' ? it_1.default : en_US_1.default },
|
|
249
262
|
react_1.default.createElement(x_date_pickers_1.MobileDatePicker, { className: classes.picker, disablePast: true, label: field.startDate && react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.placeholder", defaultMessage: "ui.eventForm.date.placeholder" }), value: field.startDate, slots: {
|
|
@@ -257,7 +270,7 @@ function EventForm(inProps) {
|
|
|
257
270
|
toolbarTitle: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.title", defaultMessage: "ui.eventForm.date.title" })
|
|
258
271
|
}
|
|
259
272
|
}, onChange: (value) => handleChangeDateTime(value, 'startDate') }),
|
|
260
|
-
react_1.default.createElement(x_date_pickers_1.MobileTimePicker, { className: classes.picker, label: field.startTime && react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.placeholder", defaultMessage: "ui.eventForm.time.placeholder" }), value: field.startTime, slots: {
|
|
273
|
+
react_1.default.createElement(x_date_pickers_1.MobileTimePicker, { className: classes.picker, disablePast: true, label: field.startTime && react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.placeholder", defaultMessage: "ui.eventForm.time.placeholder" }), value: field.startTime, slots: {
|
|
261
274
|
textField: (params) => (react_1.default.createElement(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.startTime)}`, startAdornment: (react_1.default.createElement(material_1.InputAdornment, { position: "start" },
|
|
262
275
|
react_1.default.createElement(material_1.IconButton, null,
|
|
263
276
|
react_1.default.createElement(material_1.Icon, null, "access_time")))) }) })))
|
|
@@ -286,12 +299,12 @@ function EventForm(inProps) {
|
|
|
286
299
|
react_1.default.createElement(material_1.IconButton, null,
|
|
287
300
|
react_1.default.createElement(material_1.Icon, null, "calendar_off")))) }) })))
|
|
288
301
|
}, onChange: (value) => handleChangeDateTime(value, 'endDate') }),
|
|
289
|
-
react_1.default.createElement(x_date_pickers_1.MobileTimePicker, { className: classes.picker, label: field.endTime && react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.end.placeholder", defaultMessage: "ui.eventForm.time.end.placeholder" }), value: field.endTime, slots: {
|
|
302
|
+
react_1.default.createElement(x_date_pickers_1.MobileTimePicker, { className: classes.picker, disablePast: true, label: field.endTime && react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.end.placeholder", defaultMessage: "ui.eventForm.time.end.placeholder" }), value: field.endTime, slots: {
|
|
290
303
|
textField: (params) => (react_1.default.createElement(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.endTime)}`, startAdornment: (react_1.default.createElement(material_1.InputAdornment, { position: "start" },
|
|
291
304
|
react_1.default.createElement(material_1.IconButton, null,
|
|
292
305
|
react_1.default.createElement(material_1.Icon, null, "access_time")))) }) })))
|
|
293
306
|
}, onChange: (value) => handleChangeDateTime(value, 'endTime') })))),
|
|
294
|
-
react_1.default.createElement(material_1.Button, { variant: "text", color: "secondary", onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['showEndDateTime']: !field.showEndDateTime }))) },
|
|
307
|
+
react_1.default.createElement(material_1.Button, { variant: "text", color: "secondary", onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['showEndDateTime']: !field.showEndDateTime }))), disabled: field.showEndDateTime && field.recurring !== types_1.SCEventRecurrenceType.NEVER },
|
|
295
308
|
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventForm.dateTime.placeholder", defaultMessage: "ui.eventForm.dateTime.placeholder", values: { symbol: field.showEndDateTime ? '-' : '+' } })),
|
|
296
309
|
react_1.default.createElement(EventAddress_1.default, { forwardGeolocationData: handleGeoData }),
|
|
297
310
|
privateEnabled && (react_1.default.createElement(material_1.Box, { className: classes.privacySection },
|
|
@@ -188,6 +188,7 @@ export interface FeedObjectProps extends CardProps, VirtualScrollerItemProps {
|
|
|
188
188
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
189
189
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
190
190
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
191
|
+
|event|.SCFeedObject-event|Styles applied to the event element.|
|
|
191
192
|
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
192
193
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
193
194
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
@@ -53,6 +53,7 @@ const classes = {
|
|
|
53
53
|
deleted: `${constants_1.PREFIX}-deleted`,
|
|
54
54
|
header: `${constants_1.PREFIX}-header`,
|
|
55
55
|
category: `${constants_1.PREFIX}-category`,
|
|
56
|
+
event: `${constants_1.PREFIX}-event`,
|
|
56
57
|
group: `${constants_1.PREFIX}-group`,
|
|
57
58
|
avatar: `${constants_1.PREFIX}-avatar`,
|
|
58
59
|
username: `${constants_1.PREFIX}-username`,
|
|
@@ -107,6 +108,7 @@ const Root = (0, styles_1.styled)(Widget_1.default, {
|
|
|
107
108
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
108
109
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
109
110
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
111
|
+
|event|.SCFeedObject-event|Styles applied to the event element.|
|
|
110
112
|
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
111
113
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
112
114
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
@@ -434,12 +436,17 @@ function FeedObject(inProps) {
|
|
|
434
436
|
template === feedObject_1.SCFeedObjectTemplateType.SEARCH) {
|
|
435
437
|
objElement = (react_1.default.createElement(react_1.default.Fragment, null, obj ? (react_1.default.createElement(material_1.Box, { className: (0, classnames_1.default)({ [classes.deleted]: obj && obj.deleted }) },
|
|
436
438
|
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
437
|
-
react_1.default.createElement(react_1.default.Fragment, null,
|
|
438
|
-
|
|
439
|
+
react_1.default.createElement(react_1.default.Fragment, null,
|
|
440
|
+
obj.group && (react_1.default.createElement("div", { className: classes.group },
|
|
441
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
442
|
+
obj.event && (react_1.default.createElement("div", { className: classes.event },
|
|
443
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, icon: react_1.default.createElement(Icon_1.default, null, "CalendarIcon"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
439
444
|
obj.categories.map((c) => (react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
440
445
|
react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
|
|
441
446
|
obj.group && !obj.categories.length && (react_1.default.createElement("div", { className: classes.group },
|
|
442
447
|
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: obj.group.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
448
|
+
obj.event && !obj.categories.length && (react_1.default.createElement("div", { className: classes.event },
|
|
449
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, icon: react_1.default.createElement(Icon_1.default, null, "CalendarIcon"), label: obj.event.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true }))),
|
|
443
450
|
react_1.default.createElement(material_1.CardHeader, { className: classes.header, avatar: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null }),
|
|
444
451
|
react_1.default.createElement(UserAvatar_1.default, { hide: !obj.author.community_badge },
|
|
445
452
|
react_1.default.createElement(material_1.Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -482,12 +489,17 @@ function FeedObject(inProps) {
|
|
|
482
489
|
else if (template === feedObject_1.SCFeedObjectTemplateType.SHARE) {
|
|
483
490
|
objElement = (react_1.default.createElement(react_1.default.Fragment, null, obj ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
484
491
|
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
485
|
-
react_1.default.createElement(react_1.default.Fragment, null,
|
|
486
|
-
|
|
492
|
+
react_1.default.createElement(react_1.default.Fragment, null,
|
|
493
|
+
obj.group && (react_1.default.createElement("div", { className: classes.group },
|
|
494
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
495
|
+
obj.event && (react_1.default.createElement("div", { className: classes.event },
|
|
496
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, icon: react_1.default.createElement(Icon_1.default, null, "CalendarIcon"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
487
497
|
obj.categories.map((c) => (react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
488
498
|
react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
|
|
489
499
|
obj.group && !obj.categories.length && (react_1.default.createElement("div", { className: classes.group },
|
|
490
500
|
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: obj.group.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
501
|
+
obj.event && !obj.categories.length && (react_1.default.createElement("div", { className: classes.event },
|
|
502
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: obj.event.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true }))),
|
|
491
503
|
react_1.default.createElement(material_1.CardHeader, { classes: { root: classes.header }, avatar: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }),
|
|
492
504
|
react_1.default.createElement(UserAvatar_1.default, { hide: !obj.author.community_badge },
|
|
493
505
|
react_1.default.createElement(material_1.Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url((0, contribution_1.getContributionRouteName)(obj), (0, contribution_1.getRouteData)(obj)), className: classes.activityAt },
|
|
@@ -17,12 +17,6 @@ export declare enum SCGroupEventType {
|
|
|
17
17
|
INVITE_MEMBER = "members.invite_member",
|
|
18
18
|
REMOVE_MEMBER = "members.remove_member"
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Group event structure
|
|
22
|
-
*/
|
|
23
|
-
export interface SCGroupChangeEventType {
|
|
24
|
-
group: SCGroupType;
|
|
25
|
-
}
|
|
26
20
|
export interface SCGroupMembersEventType {
|
|
27
21
|
group: SCGroupType;
|
|
28
22
|
user?: SCUserType;
|
|
@@ -70,7 +70,7 @@ export default function Category(inProps) {
|
|
|
70
70
|
// CONTEXT
|
|
71
71
|
const scRoutingContext = useSCRouting();
|
|
72
72
|
// STATE
|
|
73
|
-
const { scCategory } = useSCFetchCategory({ id: categoryId, category });
|
|
73
|
+
const { scCategory, setSCCategory } = useSCFetchCategory({ id: categoryId, category });
|
|
74
74
|
// MEMO
|
|
75
75
|
const _ButtonBaseProps = useMemo(() => (ButtonBaseProps ? ButtonBaseProps : { component: Link, to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, scCategory) }), [ButtonBaseProps, scRoutingContext, scCategory]);
|
|
76
76
|
// HOOKS
|
|
@@ -126,7 +126,7 @@ export default function EventForm(inProps) {
|
|
|
126
126
|
startTime: null,
|
|
127
127
|
endDate: null,
|
|
128
128
|
endTime: null,
|
|
129
|
-
location:
|
|
129
|
+
location: SCEventLocationType.PERSON,
|
|
130
130
|
geolocation: '',
|
|
131
131
|
lat: null,
|
|
132
132
|
lng: null,
|
|
@@ -144,6 +144,7 @@ export default function EventForm(inProps) {
|
|
|
144
144
|
// PREFERENCES
|
|
145
145
|
const scPreferences = useSCPreferences();
|
|
146
146
|
const privateEnabled = useMemo(() => scPreferences.preferences[SCPreferences.CONFIGURATIONS_EVENTS_PRIVATE_ENABLED].value, [scPreferences.preferences]);
|
|
147
|
+
const visibilityEnabled = useMemo(() => scPreferences.preferences[SCPreferences.CONFIGURATIONS_EVENTS_VISIBILITY_ENABLED].value, [scPreferences.preferences]);
|
|
147
148
|
const _backgroundCover = Object.assign({}, (field.imageOriginal
|
|
148
149
|
? { background: `url('${field.imageOriginal}') center / cover` }
|
|
149
150
|
: { background: `url('${scPreferences.preferences[SCPreferences.IMAGES_USER_DEFAULT_COVER].value}') center / cover` }));
|
|
@@ -197,6 +198,9 @@ export default function EventForm(inProps) {
|
|
|
197
198
|
if (privateEnabled) {
|
|
198
199
|
formData.append('privacy', field.isPublic ? SCEventPrivacyType.PUBLIC : SCEventPrivacyType.PRIVATE);
|
|
199
200
|
}
|
|
201
|
+
if (visibilityEnabled) {
|
|
202
|
+
formData.append('visible', true);
|
|
203
|
+
}
|
|
200
204
|
formData.append('description', field.description);
|
|
201
205
|
EventService.createEvent(formData, { headers: { 'Content-Type': 'multipart/form-data' } })
|
|
202
206
|
.then((data) => {
|
|
@@ -205,7 +209,15 @@ export default function EventForm(inProps) {
|
|
|
205
209
|
setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
|
|
206
210
|
})
|
|
207
211
|
.catch((e) => {
|
|
208
|
-
|
|
212
|
+
const _error = formatHttpErrorCode(e);
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
|
|
214
|
+
// @ts-ignore
|
|
215
|
+
if (Object.values(_error)[0].error === 'unique') {
|
|
216
|
+
setError(Object.assign(Object.assign({}, error), { ['nameError']: React.createElement(FormattedMessage, { id: "ui.eventForm.name.error.unique", defaultMessage: "ui.eventForm.name.error.unique" }) }));
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
setError(Object.assign(Object.assign({}, error), _error));
|
|
220
|
+
}
|
|
209
221
|
setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
|
|
210
222
|
Logger.error(SCOPE_SC_UI, e);
|
|
211
223
|
});
|
|
@@ -231,7 +243,8 @@ export default function EventForm(inProps) {
|
|
|
231
243
|
return (React.createElement(Root, Object.assign({ DialogContentProps: { dividers: false }, title: React.createElement(FormattedMessage, { id: "ui.eventForm.title", defaultMessage: "ui.eventForm.title" }), open: open, onClose: onClose, className: classNames(classes.root, className), actions: React.createElement(LoadingButton, { loading: field.isSubmitting, disabled: !field.name ||
|
|
232
244
|
(!field.startDate && !field.startTime) ||
|
|
233
245
|
(field.location === SCEventLocationType.ONLINE && !field.link) ||
|
|
234
|
-
(
|
|
246
|
+
(field.location === SCEventLocationType.PERSON && !field.geolocation) ||
|
|
247
|
+
(field.recurring !== SCEventRecurrenceType.NEVER && !field.endDate && !field.endTime) ||
|
|
235
248
|
Object.keys(error).length !== 0 ||
|
|
236
249
|
field.name.length > EVENT_TITLE_MAX_LENGTH ||
|
|
237
250
|
field.description.length > EVENT_DESCRIPTION_MAX_LENGTH, variant: "contained", onClick: handleSubmit, color: "secondary" }, React.createElement(FormattedMessage, { id: "ui.eventForm.button.create", defaultMessage: "ui.eventForm.button.create" })) }, rest),
|
|
@@ -241,7 +254,7 @@ export default function EventForm(inProps) {
|
|
|
241
254
|
React.createElement(FormGroup, { className: classes.form },
|
|
242
255
|
React.createElement(TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: field.name, name: "name", onChange: handleChange, InputProps: {
|
|
243
256
|
endAdornment: React.createElement(Typography, { variant: "body2" }, EVENT_TITLE_MAX_LENGTH - field.name.length)
|
|
244
|
-
}, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > EVENT_TITLE_MAX_LENGTH), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > EVENT_TITLE_MAX_LENGTH ? (React.createElement(FormattedMessage, { id: "ui.eventForm.name.error.maxLength", defaultMessage: "ui.eventForm.name.error.maxLength" })) : null }),
|
|
257
|
+
}, error: Boolean(((_a = field === null || field === void 0 ? void 0 : field.name) === null || _a === void 0 ? void 0 : _a.length) > EVENT_TITLE_MAX_LENGTH) || Boolean(error[`nameError`]), helperText: ((_b = field === null || field === void 0 ? void 0 : field.name) === null || _b === void 0 ? void 0 : _b.length) > EVENT_TITLE_MAX_LENGTH ? (React.createElement(FormattedMessage, { id: "ui.eventForm.name.error.maxLength", defaultMessage: "ui.eventForm.name.error.maxLength" })) : error[`nameError`] ? (error[`nameError`]) : null }),
|
|
245
258
|
React.createElement(Box, { className: classes.dateTime },
|
|
246
259
|
React.createElement(LocalizationProvider, { dateAdapter: AdapterDateFns, adapterLocale: scContext.settings.locale.default === 'it' ? itLocale : enLocale },
|
|
247
260
|
React.createElement(MobileDatePicker, { className: classes.picker, disablePast: true, label: field.startDate && React.createElement(FormattedMessage, { id: "ui.eventForm.date.placeholder", defaultMessage: "ui.eventForm.date.placeholder" }), value: field.startDate, slots: {
|
|
@@ -255,7 +268,7 @@ export default function EventForm(inProps) {
|
|
|
255
268
|
toolbarTitle: React.createElement(FormattedMessage, { id: "ui.eventForm.date.title", defaultMessage: "ui.eventForm.date.title" })
|
|
256
269
|
}
|
|
257
270
|
}, onChange: (value) => handleChangeDateTime(value, 'startDate') }),
|
|
258
|
-
React.createElement(MobileTimePicker, { className: classes.picker, label: field.startTime && React.createElement(FormattedMessage, { id: "ui.eventForm.time.placeholder", defaultMessage: "ui.eventForm.time.placeholder" }), value: field.startTime, slots: {
|
|
271
|
+
React.createElement(MobileTimePicker, { className: classes.picker, disablePast: true, label: field.startTime && React.createElement(FormattedMessage, { id: "ui.eventForm.time.placeholder", defaultMessage: "ui.eventForm.time.placeholder" }), value: field.startTime, slots: {
|
|
259
272
|
textField: (params) => (React.createElement(TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.startTime)}`, startAdornment: (React.createElement(InputAdornment, { position: "start" },
|
|
260
273
|
React.createElement(IconButton, null,
|
|
261
274
|
React.createElement(Icon, null, "access_time")))) }) })))
|
|
@@ -284,12 +297,12 @@ export default function EventForm(inProps) {
|
|
|
284
297
|
React.createElement(IconButton, null,
|
|
285
298
|
React.createElement(Icon, null, "calendar_off")))) }) })))
|
|
286
299
|
}, onChange: (value) => handleChangeDateTime(value, 'endDate') }),
|
|
287
|
-
React.createElement(MobileTimePicker, { className: classes.picker, label: field.endTime && React.createElement(FormattedMessage, { id: "ui.eventForm.time.end.placeholder", defaultMessage: "ui.eventForm.time.end.placeholder" }), value: field.endTime, slots: {
|
|
300
|
+
React.createElement(MobileTimePicker, { className: classes.picker, disablePast: true, label: field.endTime && React.createElement(FormattedMessage, { id: "ui.eventForm.time.end.placeholder", defaultMessage: "ui.eventForm.time.end.placeholder" }), value: field.endTime, slots: {
|
|
288
301
|
textField: (params) => (React.createElement(TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.endTime)}`, startAdornment: (React.createElement(InputAdornment, { position: "start" },
|
|
289
302
|
React.createElement(IconButton, null,
|
|
290
303
|
React.createElement(Icon, null, "access_time")))) }) })))
|
|
291
304
|
}, onChange: (value) => handleChangeDateTime(value, 'endTime') })))),
|
|
292
|
-
React.createElement(Button, { variant: "text", color: "secondary", onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['showEndDateTime']: !field.showEndDateTime }))) },
|
|
305
|
+
React.createElement(Button, { variant: "text", color: "secondary", onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['showEndDateTime']: !field.showEndDateTime }))), disabled: field.showEndDateTime && field.recurring !== SCEventRecurrenceType.NEVER },
|
|
293
306
|
React.createElement(FormattedMessage, { id: "ui.eventForm.dateTime.placeholder", defaultMessage: "ui.eventForm.dateTime.placeholder", values: { symbol: field.showEndDateTime ? '-' : '+' } })),
|
|
294
307
|
React.createElement(EventAddress, { forwardGeolocationData: handleGeoData }),
|
|
295
308
|
privateEnabled && (React.createElement(Box, { className: classes.privacySection },
|
|
@@ -188,6 +188,7 @@ export interface FeedObjectProps extends CardProps, VirtualScrollerItemProps {
|
|
|
188
188
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
189
189
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
190
190
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
191
|
+
|event|.SCFeedObject-event|Styles applied to the event element.|
|
|
191
192
|
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
192
193
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
193
194
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
@@ -51,6 +51,7 @@ const classes = {
|
|
|
51
51
|
deleted: `${PREFIX}-deleted`,
|
|
52
52
|
header: `${PREFIX}-header`,
|
|
53
53
|
category: `${PREFIX}-category`,
|
|
54
|
+
event: `${PREFIX}-event`,
|
|
54
55
|
group: `${PREFIX}-group`,
|
|
55
56
|
avatar: `${PREFIX}-avatar`,
|
|
56
57
|
username: `${PREFIX}-username`,
|
|
@@ -105,6 +106,7 @@ const Root = styled(Widget, {
|
|
|
105
106
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
106
107
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
107
108
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
109
|
+
|event|.SCFeedObject-event|Styles applied to the event element.|
|
|
108
110
|
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
109
111
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
110
112
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
@@ -432,12 +434,17 @@ export default function FeedObject(inProps) {
|
|
|
432
434
|
template === SCFeedObjectTemplateType.SEARCH) {
|
|
433
435
|
objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(Box, { className: classNames({ [classes.deleted]: obj && obj.deleted }) },
|
|
434
436
|
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
435
|
-
React.createElement(React.Fragment, null,
|
|
436
|
-
|
|
437
|
+
React.createElement(React.Fragment, null,
|
|
438
|
+
obj.group && (React.createElement("div", { className: classes.group },
|
|
439
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
440
|
+
obj.event && (React.createElement("div", { className: classes.event },
|
|
441
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.event.id, icon: React.createElement(Icon, null, "CalendarIcon"), component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
437
442
|
obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
438
443
|
React.createElement(Typography, { variant: "overline" }, c.name)))))),
|
|
439
444
|
obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
|
|
440
445
|
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
446
|
+
obj.event && !obj.categories.length && (React.createElement("div", { className: classes.event },
|
|
447
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.event.id, icon: React.createElement(Icon, null, "CalendarIcon"), label: obj.event.name, component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true }))),
|
|
441
448
|
React.createElement(CardHeader, { className: classes.header, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null }),
|
|
442
449
|
React.createElement(UserAvatar, { hide: !obj.author.community_badge },
|
|
443
450
|
React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(React.Fragment, null,
|
|
@@ -480,12 +487,17 @@ export default function FeedObject(inProps) {
|
|
|
480
487
|
else if (template === SCFeedObjectTemplateType.SHARE) {
|
|
481
488
|
objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(React.Fragment, null,
|
|
482
489
|
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
483
|
-
React.createElement(React.Fragment, null,
|
|
484
|
-
|
|
490
|
+
React.createElement(React.Fragment, null,
|
|
491
|
+
obj.group && (React.createElement("div", { className: classes.group },
|
|
492
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
493
|
+
obj.event && (React.createElement("div", { className: classes.event },
|
|
494
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.event.id, icon: React.createElement(Icon, null, "CalendarIcon"), component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
485
495
|
obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
486
496
|
React.createElement(Typography, { variant: "overline" }, c.name)))))),
|
|
487
497
|
obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
|
|
488
498
|
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
499
|
+
obj.event && !obj.categories.length && (React.createElement("div", { className: classes.event },
|
|
500
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.event.id, icon: React.createElement(Icon, null, "groups"), label: obj.event.name, component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true }))),
|
|
489
501
|
React.createElement(CardHeader, { classes: { root: classes.header }, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }),
|
|
490
502
|
React.createElement(UserAvatar, { hide: !obj.author.community_badge },
|
|
491
503
|
React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(Link, { to: scRoutingContext.url(getContributionRouteName(obj), getRouteData(obj)), className: classes.activityAt },
|
|
@@ -17,12 +17,6 @@ export declare enum SCGroupEventType {
|
|
|
17
17
|
INVITE_MEMBER = "members.invite_member",
|
|
18
18
|
REMOVE_MEMBER = "members.remove_member"
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Group event structure
|
|
22
|
-
*/
|
|
23
|
-
export interface SCGroupChangeEventType {
|
|
24
|
-
group: SCGroupType;
|
|
25
|
-
}
|
|
26
20
|
export interface SCGroupMembersEventType {
|
|
27
21
|
group: SCGroupType;
|
|
28
22
|
user?: SCUserType;
|