Add folder indexer

folders
Rick Carlino 2019-12-04 09:49:55 -06:00
parent e2d311e3ea
commit 976a912c07
4 changed files with 22 additions and 0 deletions

View File

@ -14,6 +14,7 @@ import { HelpState } from "../help/reducer";
import { UsageIndex } from "./in_use";
import { SequenceMeta } from "./sequence_meta";
import { AlertReducerState } from "../messages/interfaces";
import { RootFolderNode } from "../scratch/constants";
export type UUID = string;
export type VariableNameSet = Record<string, SequenceMeta | undefined>;
@ -72,6 +73,7 @@ export interface ResourceIndex {
* }
*/
inUse: UsageIndex;
sequenceFolders: RootFolderNode;
}
export interface RestResources {

View File

@ -74,6 +74,9 @@ export const emptyState = (): RestResources => {
"Sequence.Regimen": {},
"Sequence.Sequence": {},
"Sequence.FbosConfig": {}
},
sequenceFolders: {
folders: []
}
}
};

View File

@ -18,6 +18,7 @@ import {
findByKindAndId,
selectAllLogs,
selectAllRegimens,
selectAllFolders,
} from "./selectors_by_kind";
import { ExecutableType } from "farmbot/dist/resources/api_resources";
import { betterCompact, unpackUUID } from "../util";
@ -29,6 +30,7 @@ import { ActionHandler } from "../redux/generate_reducer";
import { get } from "lodash";
import { Actions } from "../constants";
import { getFbosConfig } from "./getters";
import { ingest } from "../scratch/data_transfer";
export function findByUuid(index: ResourceIndex, uuid: string): TaggedResource {
const x = index.references[uuid];
@ -45,6 +47,17 @@ type IndexDirection =
type IndexerCallback = (self: TaggedResource, index: ResourceIndex) => void;
export interface Indexer extends Record<IndexDirection, IndexerCallback> { }
let id = -1;
const folderIndexer: IndexerCallback = (r, _i) => {
if (r.kind === "Folder" || r.kind === "Sequence") {
const folders = selectAllFolders(_i)
.map(x => ({ id: id--, ...x.body }));
_i.sequenceFolders = ingest(folders);
}
};
const SEQUENCE_FOLDERS: Indexer = { up: folderIndexer, down: folderIndexer };
const REFERENCES: Indexer = {
up: (r, i) => i.references[r.uuid] = r,
down: (r, i) => delete i.references[r.uuid],
@ -137,6 +150,7 @@ export const INDEXERS: Indexer[] = [
ALL,
BY_KIND,
BY_KIND_AND_ID,
SEQUENCE_FOLDERS
];
type IndexerHook = Partial<Record<TaggedResource["kind"], Reindexer>>;

View File

@ -22,6 +22,7 @@ import {
TaggedFarmwareInstallation,
TaggedAlert,
TaggedPointGroup,
TaggedFolder,
} from "farmbot";
import {
isTaggedResource,
@ -107,6 +108,8 @@ export const selectAllSavedPeripherals =
(input: ResourceIndex) => selectAllPeripherals(input).filter(isSaved);
export const selectAllAlerts =
(i: ResourceIndex) => findAll<TaggedAlert>(i, "Alert");
export const selectAllFolders =
(i: ResourceIndex) => findAll<TaggedFolder>(i, "Folder");
export const findByKindAndId = <T extends TaggedResource>(
i: ResourceIndex, kind: T["kind"], id: number | undefined): T => {