Add folder indexer
parent
e2d311e3ea
commit
976a912c07
|
@ -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 {
|
||||
|
|
|
@ -74,6 +74,9 @@ export const emptyState = (): RestResources => {
|
|||
"Sequence.Regimen": {},
|
||||
"Sequence.Sequence": {},
|
||||
"Sequence.FbosConfig": {}
|
||||
},
|
||||
sequenceFolders: {
|
||||
folders: []
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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>>;
|
||||
|
|
|
@ -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 => {
|
||||
|
|
Loading…
Reference in New Issue