Практический пример: рассмотрим список развертывания / свертывания. Каждый элемент расширяет другой список.
export interface MainDomainList {
id: number
name: string;
}
export interface SubDomainList {
id: number
name: string;
}
export interface AppState {
mainDomainList: MainDomainList[];
subDomainList: SubDomainList[];
}
В пользовательском интерфейсе список должен быть представлен следующим образом:
MainDomainList[1]
SubDomainList[] (entire list)
MainDomainList[2]
Another SubDomainList[] (entire list)
etc..
Когда пользователь нажимает на MainDomain [n], происходит вызов серверной части, которая возвращает список SubDomain []. Между ними нет никакой связи.
Кажется, что самая сложная часть заключается в том, что субдомены загружаются один за другим при нажатии, а не все сразу, а несколько основных доменов могут быть открыты одновременно, как в пример выше. Кроме того, должна быть возможность легко выполнять операции CRUD с объектами subDomainList.
Я пробовал использовать селектор, который выбирает элемент из состояния по идентификатору, но каждый раз состояние переопределяется.
Моя первоначальная идея состояла в том, чтобы создать отдельное состояние, в котором после успешной загрузки SubDomainList [] я мог бы добавить загруженный SubDomainList [], отправив действие «ADD», таким образом добавив сущности и идентификатор выбранного MainDomainList в новый список состояние, когда пользователь щелкает по списку, получая что-то вроде этого:
exportt interface AppState {
mainDomainList: MainDomainList[];
subDomainList: SubDomainList[];
newList: NewList[];
}
{
mainDomainList : {
entities: {
md1: {
id: 'md1',
name: '1'
},
md2: {
id: 'md2',
name: '2'
}
}
},
subDomainList : {
entities : {
sd1 : {
id : 'sd1',
name: 'name1'
},
sd2 : {
id : 'sd2',
name: 'name2'
}
},
newList : {
entities : {
md1 : {
id : 'md1',
subDomainList: [{}, {}]
},
md2 : {
id : 'md2',
subDomainList: [{}, {}]
}
}
}
}
Затем каким-то образом я получу все объекты newList и сопоставлю их в пользовательском интерфейсе с идентификатором MainDomainList [n] .id
Правильно ли мой подход или есть другое лучшее или менее сложное решение этой проблемы?
Я новичок в этом предмете, но у меня было много головной боли, пытаясь понять, как реализовать это с помощью ngrx / Entity, и пока это не удалось, хотя это должно быть довольно распространенным случаем. Любая помощь приветствуется.