Ability to add folder to level 0

folders
Rick Carlino 2019-12-02 10:07:37 -06:00
parent 90e97d7bbb
commit 7f2c174d29
4 changed files with 29 additions and 19 deletions

View File

@ -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();

View File

@ -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) {

View File

@ -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);

View File

@ -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() {