export type ProjectState = {
items: Array<TreeItem<Project>>,
- currentItemId: string
+ currentItemId: string,
+ creator: {
+ opened: boolean,
+ pending: boolean
+ }
};
export function findTreeItem<T>(tree: Array<TreeItem<T>>, itemId: string): TreeItem<T> | undefined {
}
export function getTreePath<T>(tree: Array<TreeItem<T>>, itemId: string): Array<TreeItem<T>> {
- for (const item of tree){
- if(item.id === itemId){
+ for (const item of tree) {
+ if (item.id === itemId) {
return [item];
} else {
const branch = getTreePath(item.items || [], itemId);
- if(branch.length > 0){
+ if (branch.length > 0) {
return [item, ...branch];
}
}
return items;
}
-const projectsReducer = (state: ProjectState = { items: [], currentItemId: "" }, action: ProjectAction) => {
+const initialState: ProjectState = {
+ items: [],
+ currentItemId: "",
+ creator: {
+ opened: false,
+ pending: false
+ }
+};
+
+
+const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => {
return actions.match(action, {
- CREATE_PROJECT: project => ({
- ...state,
- items: state.items.concat({
- id: project.uuid,
- open: false,
- active: false,
- status: TreeItemStatus.Loaded,
- toggled: false,
- items: [],
- data: project
- })
- }),
+ OPEN_PROJECT_CREATOR: () => ({ ...state, creator: { opened: true, pending: false } }),
+ CREATE_PROJECT: () => ({ ...state, creator: { opened: false, pending: true } }),
+ CREATE_PROJECT_SUCCESS: () => ({ ...state, creator: { opened: false, pending: false } }),
+ CREATE_PROJECT_ERROR: () => ({ ...state, creator: { opened: false, pending: false } }),
REMOVE_PROJECT: () => state,
PROJECTS_REQUEST: itemId => {
const items = _.cloneDeep(state.items);