Ability to add folder to level 0
parent
90e97d7bbb
commit
7f2c174d29
|
@ -7,6 +7,7 @@ import {
|
|||
setFolderColor,
|
||||
setFolderName,
|
||||
toggleFolderOpenState,
|
||||
createFolder,
|
||||
} from "../actions";
|
||||
import { times, sample } from "lodash";
|
||||
import { cloneAndClimb, climb } from "../climb";
|
||||
|
@ -61,6 +62,17 @@ const randomNode = () => {
|
|||
return node;
|
||||
};
|
||||
|
||||
describe("creation of folders", () => {
|
||||
it("adds a folder to level 0", async () => {
|
||||
const name = "~ Folder Name ~";
|
||||
const nextGraph = await createFolder(GRAPH, undefined, name);
|
||||
expect(nextGraph.folders.map(x => x.name)).toContain(name);
|
||||
});
|
||||
|
||||
test.todo("adds a folder to level 1");
|
||||
test.todo("adds a folder to level 2");
|
||||
});
|
||||
|
||||
describe("setting of color, name", () => {
|
||||
it("sets the color", async () => {
|
||||
const node = randomNode();
|
||||
|
|
|
@ -8,6 +8,8 @@ import {
|
|||
import { cloneAndClimb } from "./climb";
|
||||
import { Color } from "farmbot";
|
||||
|
||||
type TreePromise = Promise<Tree>;
|
||||
|
||||
const DEFAULT_NAME = "New Folder";
|
||||
|
||||
const initial = (name: string): FolderNodeInitial => ({
|
||||
|
@ -94,7 +96,7 @@ const FIX_THIS_ASAP = () => Math.round(Math.random() * -10000000);
|
|||
|
||||
export const deleteFolder = (tree: Tree, _id: number) => {
|
||||
// Step one: Find parent ID. Crash if the folder is not empty.
|
||||
// Step two: Unsplice node from parent.
|
||||
// Step two: Un-splice node from parent.
|
||||
|
||||
return Promise.resolve(cloneAndClimb(tree, (_node, _halt) => {
|
||||
throw new Error("Work in progress.");
|
||||
|
@ -102,14 +104,17 @@ export const deleteFolder = (tree: Tree, _id: number) => {
|
|||
};
|
||||
|
||||
export const createFolder =
|
||||
(tree: Tree, parent_id?: number, name = DEFAULT_NAME) => {
|
||||
(tree: Tree, parent_id?: number, name = DEFAULT_NAME): TreePromise => {
|
||||
console.error("This function has problems: " +
|
||||
"ID's are not real. Can't control folder order.");
|
||||
if (!parent_id) {
|
||||
return Promise.resolve({
|
||||
...tree,
|
||||
folders: [...tree.folders, initial(name)]
|
||||
});
|
||||
}
|
||||
|
||||
return Promise.resolve(cloneAndClimb(tree, (node, halt) => {
|
||||
if (!parent_id) {
|
||||
tree.folders.push(initial(name));
|
||||
return halt();
|
||||
}
|
||||
|
||||
if (node.id == parent_id) {
|
||||
switch (node.kind) {
|
||||
|
|
|
@ -12,10 +12,10 @@ interface VisitorProps {
|
|||
state: TreeClimberState;
|
||||
}
|
||||
|
||||
type Halt = () => void;
|
||||
type Halt = () => RootFolderNode;
|
||||
type TreeClimber = (t: FolderUnion,
|
||||
/** Calling this function stops tree climb from continuing. */
|
||||
halt: Function) => void;
|
||||
halt: Halt) => void;
|
||||
|
||||
function visit(p: VisitorProps) {
|
||||
const { node, callback, halt } = p;
|
||||
|
@ -36,7 +36,10 @@ function visit(p: VisitorProps) {
|
|||
/** Recursively climb a directory structure. */
|
||||
export const climb = (t: RootFolderNode, callback: TreeClimber) => {
|
||||
const state: TreeClimberState = { active: true };
|
||||
const halt = () => { state.active = false; };
|
||||
const halt = () => {
|
||||
state.active = false;
|
||||
return t;
|
||||
};
|
||||
t.folders.map((node) => {
|
||||
const props = { node, callback, halt, state };
|
||||
state.active && visit(props);
|
||||
|
|
|
@ -1,15 +1,5 @@
|
|||
import React from "react";
|
||||
|
||||
export const createFolder = () => Promise.resolve({});
|
||||
export const deleteFolder = () => Promise.resolve({});
|
||||
export const saveFolder = () => Promise.resolve({});
|
||||
export const setFolderColor = () => Promise.resolve({});
|
||||
export const setFolderName = () => Promise.resolve({});
|
||||
export const moveFolderItem = () => Promise.resolve({});
|
||||
export const moveFolder = () => Promise.resolve({});
|
||||
export const toggleFolder = () => Promise.resolve({});
|
||||
export const searchByNameOrFolder = () => Promise.resolve({});
|
||||
|
||||
export class ScratchPad extends React.Component<{}, {}> {
|
||||
|
||||
render() {
|
||||
|
|
Loading…
Reference in New Issue