Мы используем ScheduleComponent (оболочку реагирования), и нам нужно переключиться между состоянием группировки данных и состоянием несгруппированных данных.
Вот как выглядит разметка:
<ScheduleComponent
width="100%"
height="calc(100% - 60px)"
currentView="TimelineWeek"
selectedDate={state.selectedDate}
eventSettings={state.eventSettings}
group={state.group}
>
<ViewsDirective>
<ViewDirective option="TimelineDay" />
<ViewDirective option="TimelineWeek" />
<ViewDirective option="TimelineMonth" />
</ViewsDirective>
<Inject services={[TimelineViews, TimelineMonth]} />
{resourcesDirective && resourcesDirective.length ? (
<ResourcesDirective>
{resourcesDirective.map(rd => (
<ResourceDirective
key={rd.field}
field={rd.field}
title={rd.title}
name={rd.name}
dataSource={rd.dataSource}
textField={rd.textField}
idField={rd.idField}
colorField={rd.colorField}
/>
))}
</ResourcesDirective>
) : (
""
)}
</ScheduleComponent>;
Вот предварительный просмотр динамически сгенерированного набора свойств / параметров ScheduleComponent, переданного в ScheduleComponent для:
1 - состояние несгруппированных данных:
{
"selectedDate": "2020-02-12T23:00:00.000Z",
"eventSettings": {
"fields": {
"id": "id",
"subject": {
"name": "4b0c5bdf-41b0-4478-990c-41d06b9941ae"
},
"startTime": {
"name": "c8f10b79-a557-4e28-bb91-bc3f6428bfe0"
},
"endTime": {
"name": "72cd7bde-a6d4-4877-a5c5-9d3e947a39d9"
}
},
"dataSource": [{
"id": "2f9a08d1-58aa-11ea-9e9a-0b771aade197",
"4b0c5bdf-41b0-4478-990c-41d06b9941ae": "task044",
"b65757c2-d4c1-404c-8e42-f9377bfc18fc": "91ef822c-3d7e-4071-805a-3613aa2b4f87",
"978c8dfc-ee35-48d4-9e60-41691c367ced": "{\"startDate\":\"2020-02-13T23:00:00.000Z\",\"endDate\":\"2020-02-13T23:00:00.000Z\"}",
"92b16d99-21fe-402c-ba3b-61d4fb5d9dfc": "id-ew9j",
"38e1b256-aeb8-4fd7-a4db-337c1dda0605": 44,
"372a6ad4-4f97-43a6-90f5-d5494241ba03": null,
"c8f10b79-a557-4e28-bb91-bc3f6428bfe0": "2020-02-12T23:00:00.000Z",
"72cd7bde-a6d4-4877-a5c5-9d3e947a39d9": "2020-03-17T23:00:00.000Z"
}, {
"id": "7b689441-57e5-11ea-b2fd-1568322e886b",
"4b0c5bdf-41b0-4478-990c-41d06b9941ae": "tassk03",
"b65757c2-d4c1-404c-8e42-f9377bfc18fc": "ebda8884-cbc5-4030-a54d-34a2df32b701",
"978c8dfc-ee35-48d4-9e60-41691c367ced": null,
"92b16d99-21fe-402c-ba3b-61d4fb5d9dfc": "id-aoab",
"38e1b256-aeb8-4fd7-a4db-337c1dda0605": 95,
"372a6ad4-4f97-43a6-90f5-d5494241ba03": null,
"c8f10b79-a557-4e28-bb91-bc3f6428bfe0": "2020-02-25T23:00:00.000Z",
"72cd7bde-a6d4-4877-a5c5-9d3e947a39d9": "2020-06-18T23:00:00.000Z"
},
...]
}
}
2 - сгруппированные данные состояние:
{
"selectedDate": "2020-02-12T23:00:00.000Z",
"eventSettings": {
"fields": {
"id": "id",
"subject": {
"name": "4b0c5bdf-41b0-4478-990c-41d06b9941ae"
},
"startTime": {
"name": "c8f10b79-a557-4e28-bb91-bc3f6428bfe0"
},
"endTime": {
"name": "72cd7bde-a6d4-4877-a5c5-9d3e947a39d9"
},
"92b16d99-21fe-402c-ba3b-61d4fb5d9dfc": {
"name": "92b16d99-21fe-402c-ba3b-61d4fb5d9dfc"
}
},
"dataSource": [{
"id": "2f9a08d1-58aa-11ea-9e9a-0b771aade197",
"4b0c5bdf-41b0-4478-990c-41d06b9941ae": "task044",
"b65757c2-d4c1-404c-8e42-f9377bfc18fc": "91ef822c-3d7e-4071-805a-3613aa2b4f87",
"978c8dfc-ee35-48d4-9e60-41691c367ced": "{\"startDate\":\"2020-02-13T23:00:00.000Z\",\"endDate\":\"2020-02-13T23:00:00.000Z\"}",
"92b16d99-21fe-402c-ba3b-61d4fb5d9dfc": "id-ew9j",
"38e1b256-aeb8-4fd7-a4db-337c1dda0605": 44,
"372a6ad4-4f97-43a6-90f5-d5494241ba03": null,
"c8f10b79-a557-4e28-bb91-bc3f6428bfe0": "2020-02-12T23:00:00.000Z",
"72cd7bde-a6d4-4877-a5c5-9d3e947a39d9": "2020-03-17T23:00:00.000Z"
}, {
"id": "7b689441-57e5-11ea-b2fd-1568322e886b",
"4b0c5bdf-41b0-4478-990c-41d06b9941ae": "tassk03",
"b65757c2-d4c1-404c-8e42-f9377bfc18fc": "ebda8884-cbc5-4030-a54d-34a2df32b701",
"978c8dfc-ee35-48d4-9e60-41691c367ced": null,
"92b16d99-21fe-402c-ba3b-61d4fb5d9dfc": "id-aoab",
"38e1b256-aeb8-4fd7-a4db-337c1dda0605": 95,
"372a6ad4-4f97-43a6-90f5-d5494241ba03": null,
"c8f10b79-a557-4e28-bb91-bc3f6428bfe0": "2020-02-25T23:00:00.000Z",
"72cd7bde-a6d4-4877-a5c5-9d3e947a39d9": "2020-06-18T23:00:00.000Z"
},...]
},
"group": {
"resources": ["92b16d99-21fe-402c-ba3b-61d4fb5d9dfc"]
},
"ResourcesDirective": [{
"field": "92b16d99-21fe-402c-ba3b-61d4fb5d9dfc",
"title": "Tag-field",
"name": "92b16d99-21fe-402c-ba3b-61d4fb5d9dfc",
"dataSource": [{
"content": "option1",
"cellClass": "color1",
"rippleColor": "#72C045",
"id": "id-keho",
"tagIndex": 0
}, {
"content": "option2",
"cellClass": "color2",
"rippleColor": "#F1921F",
"id": "id-ew9j",
"tagIndex": 1
}, {
"content": "option3",
"cellClass": "color3",
"rippleColor": "#F16651",
"id": "id-aoab",
"tagIndex": 2
}],
"textField": "content",
"idField": "id",
"colorField": "rippleColor"
}]
}
При переключении из состояния несгруппированного расписания в сгруппированное, вызывая метод setState следующим образом:
this.setState({
selectedDate: newProps.selectedDate,
eventSettings: newProps.eventSettings,
group: newProps.group,
ResourcesDirective: newProps.ResourcesDirective,
});
мы получаем эти ошибки:
ej2-schedule.umd.min. js: 10 Uncaught TypeError: Невозможно прочитать свойство 'generateResourceLevels' со значением null
И при переключении из состояния сгруппированных данных в разгруппированное мы получить эти ошибки:
Uncaught TypeError: Невозможно преобразовать undefined или null в объект
Когда это начальное отображение, все работает нормально для того же параметра Если заданы параметры как для сгруппированных, так и для негруппированных состояний, проблемы возникают только при переключении из негруппированных в сгруппированные состояния или наоборот. Переключение из сгруппированного состояния в другое (путем группировки на основе другого ресурса) также работает нормально. мы используем
"react": "^16.12.0",
"webpack": "^4.12.0"
РЕДАКТИРОВАТЬ ПОСЛЕ ответа Баласубраманяна
Вот два стека, воспроизводящих упомянутые ошибки: 1- https://stackblitz.com/edit/react-gw8qs1-cerwzz: it происходит при нажатии на кнопку «Разгруппировать» : ошибка видна в консоли.
TypeError: Невозможно преобразовать неопределенный или нулевой объект
2- https://stackblitz.com/edit/react-gw8qs1-cz2nhg: при нажатии на кнопку "group" мы видим:
TypeError: Невозможно прочитать свойство 'generateResourceLevels' из null
РЕДАКТИРОВАТЬ 2 ПОСЛЕ второго ответа Баласубраманяна
Теперь все идет намного лучше, поскольку мы можем группировать / разгруппировать ( снимок экрана здесь ), но мы по-прежнему у меня есть еще одна проблема, которую я не могу воспроизвести: когда расписание начинается сначала без группировки, а затем мы группируем его, мы получаем эту ошибку:
Uncaught TypeError: Cannot use 'in' operator to search for '__eventList' in null
at Function.e.addOrGetEventData (ej2-base.umd.min.js:10)
at Function.e.remove (ej2-base.umd.min.js:10)
at i.unwireEvents (ej2-schedule.umd.min.js:10)
at i.destroy (ej2-schedule.umd.min.js:10)
at t.n.destroy (ej2-schedule.umd.min.js:10)
at t.n.componentWillUnmount (ej2-react-base.umd.min.js:10)
at callComponentWillUnmountWithTimer (react-dom.development.js:21896)
at HTMLUnknownElement.callCallback (react-dom.development.js:336)
at Object.invokeGuardedCallbackDev (react-dom.development.js:385)
at invokeGuardedCallback (react-dom.development.js:440)
Я пытался найти какую-либо разницу с вашими последними демо для разгруппировки, я обнаружил, что вы держите ресурсов Директива всегда включена в ScheduleComponent независимо от того, активна ли группировка или нет, и мы не можем угадать и передать любую ResourcesDirective , когда группировка не активна, как мы Не знаю, какие возможные ресурсы для группировки будут выбраны пользователем позже, поэтому я попытался сгенерировать их динамически только для случая группировки, чтобы попытаться воспроизвести ошибку, которую мы получили в этом stackblitz , но это та же самая ошибка, которую мы получили до того, что видел, а не новая:
TypeError: Cannot read property 'generateResourceLevels' of null
at i.generateColumnLevels (util.js:5)
at i.renderLayout (util.js:5)
at e.initializeLayout (util.js:5)
at e.render (util.js:5)
at t.n.initializeView (util.js:5)
at eval (util.js:5)
at e.notify (dom.js:275)
at t.n.trigger (util.js:6)
at eval (util.js:5)
at e.notify (dom.js:275)
мы больше не получаем эту старую ошибку в нашем приложении.