{"version":3,"sources":["Toolbar/moe-icon.png","AppState.tsx","Board/BoardCard/IndicatorList.component.tsx","Board/Board.utils.tsx","Board/BoardCard/IndicatorLabel.component.tsx","Board/BoardCard/BoardCard.component.tsx","Board/Board.DragEnd.reducer.tsx","List/List.DragEnd.reducer.tsx","Board/Board.CreateCard.reducer.tsx","Board/TaskSuggestions.tsx","Board/Board.ArchiveCard.reducer.tsx","Board/Board.UpdateCard.reducer.tsx","Board/Board.UpdateHighLevelLink.reducer.tsx","Board/Board.AddIndicatorToCard.reducer.tsx","Board/Board.RemoveIndicatorToCard.reducer.tsx","Indicator/Indicator.addIndicatorToList.reducer.tsx","Indicator/Indicator.removeIndicatorFromList.reducer.tsx","Indicator/Indicator.updateIndicator.reducer.tsx","Board/Board.MoveCardToList.reducer.tsx","Board/Board.FilterLists.reducer.tsx","utils.tsx","Board/Board.CreateList.reducer.tsx","Board/Board.MoveList.reducer.tsx","Board/Board.DeleteList.reducer.tsx","List/List.updateList.reducer.tsx","Board/BoardState.tsx","Toolbar/ToolBarButtonFilter.component.tsx","Toolbar/ToolBarButtonEdit.component.tsx","Toolbar/ToolBarButtonHelp.component.tsx","Toolbar/ToolBarButtonRoute.component.tsx","Toolbar/ToolBar.component.tsx","Board/BoardList/BoardList.component.tsx","Board/Board.component.tsx","Board/Printable.tsx","Routes/Home.tsx","Summary/SummaryList.tsx","Summary/SummaryHorizontalList.tsx","Routes/Summary.tsx","Field/FieldButton.tsx","Field/Field.tsx","Field/FieldInputTextReactHookForm.tsx","Field/FieldTextarea.tsx","Field/FieldSelect.tsx","Field/FieldInputColour.tsx","Field/FieldInputTextPlain.tsx","Field/getGloss.tsx","Indicator/IndicatorEdit.form.component.tsx","Field/FieldCheckList.tsx","Board/BoardCard/BoardCardView.modal.component.tsx","Modal/Modal.styles.tsx","Modal/ModalContainer.component.tsx","Filter/FilterView.modal.component.tsx","Evaluation/EvaluationView.modal.component.tsx","List/ListEdit.form.component.tsx","List/UpdateListsView.modal.component.tsx","Help/HelpView.modal.component.tsx","Download/DownloadView.modal.component.tsx","Upload/Upload.modal.component.tsx","Modal/Modals.component.tsx","App.tsx","index.tsx","NonReact.tsx"],"names":["module","exports","DEFAULT_APP_STATE","modals","modalOpen","setModalOpen","closeModal","AppContext","React","createContext","useAppContext","useContext","IndicatorList","_ref","children","react_default","a","createElement","className","getListDetailsFromTask","taskID","lists","_list","listID","undefined","resultIndex","highLevelListID","Object","values","forEach","list","index","taskIds","indexOf","id","isHighLevel","upgradev0Tov1","v0Data","objectSpread2","indicators","upgradev1Tov2","v1Data","rawData","tasks","task","highLevelTaskID","idAsString","String","highLevelTaskIDs","cardColour","upgradev2Tov3","v2Data","shouldShowIndicators","_i","_Object$entries","entries","length","_Object$entries$_i","slicedToArray","isStandard","type","handleFileRead","result","onImportData","resultContent","removeWhiteSpaceAndEnters","replace","format","json","version","data","Error","parsers","VERSION_0_0","VERSION_0_1","VERSION_0_2","VERSION_0_3","parse","assessFormat","JSON","console","log","e","alert","concat","toString","loadJSON","filePath","callback","xobj","XMLHttpRequest","overrideMimeType","open","onreadystatechange","readyState","status","responseText","send","tooltipStyle","background","color","border","borderRadius","maxWidth","whiteSpace","padding","zIndex","createLinkageStyle","borderStyle","paddingLeft","colourWidth","gradient","sortedColours","toConsumableArray","sort","colour","lastStop","backgroundImage","borderBottomLeftRadius","borderTopLeftRadius","IndicatorLabel","title","label","onClick","es","style","BoardCard","isNewTask","isDragDisabled","showIndicators","react_beautiful_dnd_esm","draggableId","provided","snapshot","openModal","indicatorID","arguments","targetId","indicatorIDs","extraStyle","boardcard--dragging","isDragging","bounceIn","onIndicatorClick","stopPropagation","assign","taskIdToCardId","classnames","ref","innerRef","draggableProps","dragHandleProps","dangerouslySetInnerHTML","__html","description","IndicatorList_component","map","IndicatorLabel_component","key","taskId","scrollToCard","cardId","setTimeout","toolbar","document","querySelector","newCardElement","getElementById","windowRect","body","getBoundingClientRect","rect","offsetY","top","offsetX","left","window","scrollTo","error","BoardCardContainer","props","AppState","Consumer","value","BoardCard_component_BoardCard","moveWithinList","startList","from","to","orderedTasksInList","moveTaskWithinList","updatedList","updateList","updateCollection","moveToList","originalIndex","finishList","destinationIndex","_objectSpread2","startTaskIds","removeFromList","newStart","finishTaskIds","addToList","newFinish","defineProperty","taskList","fromIndex","toIndex","newTaskIds","removedItem","splice","destinationList","position","Array","totalList","filterResult","pick","dragEndReducer","oldState","destination","source","droppableId","moveList","listsOrder","newListsOrder","dragListEndReducer","createCardReducer","card","listId","newTaskId","DEFAULT_TASK_SUGGESTIONS","indicatorDescription","outcomeLevel","High","Intermediate","Low","Output","Input","dataCollectionMethod","dataMeasurement","meansOfVerification","personResponsibleForCollection","dataSource","cost","whenWillDataBeCollected","measurementOfVerification","indicatorTitle","archiveCardReducer","cardID","newState","taskIndexInList","newTasksList","updatedLists","archivedFromList","updateCardReducer","taskToBeUpdated","fieldsToBeUpdated","updateHighLevelLink","shouldAdd","foundIndex","push","updatedTask","addIndicatorReducer","ids","removeIndicatorReducer","indicatorIndex","addIndicatorToListReducer","newIndicator","removeIndicatorFromListReducer","updateIndicatorReducer","moveTaskToListReducer","targetListID","_getListDetailsFromTa","defaultList","updatedTasks","filterListsReducer","filter","newList","filteredTasks","filterMatches","keys","castedKey","prop","filterValue","isArray","idGen","uniqueId","Date","now","toUpperCase","convertToHTML","match","space","url","hyperlink","aTag","setAttribute","textContent","outerHTML","replaceLinks","replaceLineBreaks","createListReducer","createListProps","tip","moveListReducer","moveListProps","placement","slice","item","deleteListReducer","listToBeRemoved","updateListReducer","BoardContext","unfilteredLists","onDragEnd","onDragListEnd","onCreateCard","onArchiveCard","onUpdateCard","onAddIndicatorToCard","onRemoveIndicatorFromCard","onAddIndicatorToList","onRemoveIndicatorFromList","onUpdateIndicator","onMoveTaskToListReducer","onSetFilter","maxBoardListWidthPx","outerWidth","taskSuggestions","onSetEvaluationTitle","onSetEvaluationDescription","evaluationTitle","evaluationDescription","onAddHighLevelLink","onRemoveHighLevelLink","isEmptyBoard","onCreateList","onMoveList","onRemoveList","onUpdateList","isValidTemplateName","templateNames","useBoardState","prepopulatedLists","prepopulatedTasks","prepopulatedIndicators","prepopulatedTitle","prepopulatedDescription","prepopulatedListsOrder","_useState","useState","_useState2","setFilter","_useState3","DEFAULT_BOARD_LISTS","_useState4","setLists","_useState5","DEFAULT_BOARD_LISTS_ORDER","_useState6","setListsOrder","_useState7","DEFAULT_INDICATORS","_useState8","setIndicators","_useState9","_useState10","setTasks","_useState11","_useState12","setNewTaskId","_useState13","_useState14","setMaxBoardListWidthPx","_useState15","_useState17","DEFAULT_TITLE","_useState18","setEvaluationTitle","_useState19","_useState20","setEvaluationDescription","useEffect","timer","clearTimeout","boardlists","querySelectorAll","Math","max","apply","boardlist","scrollWidth","useCallback","newLists","newCard","_createCardReducer","newTasks","_archiveCardReducer","updatedProperties","updatedTaskList","indicator","updated","reduce","desc","_getListDetailsFromTa2","taskTypesWithStyle","highLevelTasksID","_tasks$key","_tasks$key$highLevelT","colorTarget","colours","addStyleToTasks","filteredLists","template","importedLists","importedOrder","defaultProps","defaultBoardState","resetApp","_createListReducer","_deleteListReducer","newListOrder","list-0","list-1","list-2","list-3","list-4","list-5","indicator-1","indicator-2","how","howOften","who","indicator-3","indicator-4","indicator-5","indicator-6","indicator-7","indicator-8","ToolBarButtonFilter","data-test-button-edit-filters","ToolBarButtonEdit","ToolBarButtonHelp","data-test-button-help","ToolBarButtonRoute","isWarning","classes","toolbar__button--warning","react_router_dom","ToolBar","hasFilterApplied","isSummaryView","useLocation","pathname","_useContext","openTemplate","homeURL","location","protocol","host","join","Helmet","src","MoeIcon","alt","width","ToolBarButtonEdit_component","ToolBarButtonRoute_component","Fragment","menu_button_esm","onSelect","print","target","href","file","data-test-button-clear-filters","ToolBarButtonFilter_component","ToolBarButtonHelp_component","BoardList","isViewOnly","isListDragging","onOpenModal","newID","onListNameClick","updateListID","direction","isDraggingOver","classNames","boardlist--card-drag-over","boardlist--list-drag-over","droppableProps","minWidth","aria-label","data-test-button-create-card-modal","BoardCard_component","placeholder","Board","templateID","setTemplate","templateParam","URLSearchParams","search","get","BoardState","_ref2","hasFilters","thisTasks","BoardList_component","LIST_CATEGORIES","Printable","usedIndicators","listOrder","sortedLists","b","withIndicators","hasIndicatorsInList","titleAbreviation","split","accum","word","charAt","indicatorListTask","taskLayout","_ref3","_ref3$title","_ref3$label","_ref3$description","_ref3$how","_ref3$howOften","_ref3$who","Home","Board_component","Printable_Printable","SummaryList","SummaryHorizontalList","Summary","reversedList","reverse","assumptionListID","assumptionList","shift","assumptionsTasks","highLevelLists","highLevelTaskOrder","dangerousHTML","summaryTasks","Summary_SummaryList","Summary_SummaryHorizontalList","Button","_classnames","level","icon","_ref$disabled","disabled","ReadMode","readOnly","setIsEditing","isTextArea","setSelectionPosition","selection","getSelection","charsFromStart","getTextLengthBetweenElements","element","lastElement","countOffset","whiteSpaceFound","counter","childNodes","node","nodeName","nodeValue","trim","anchorNode","focusOffset","classList","contains","onFocus","react","role","tabIndex","FieldContext","selectionPosition","onBlur","EditMode","Provider","overflow","clip","height","margin","Field","readModeClassName","useCustomViewMode","forcedEditMode","forceEditMode","isEditing","showCustomViewMode","htmlFor","InputText_ReactHookForm","forwardRef","name","onChange","propClassName","maxLength","onKeyPress","_ref$placeholder","src_Field_Field","Textarea","_ref$className","noresize","hasHadInitialFocus","setInitialFocus","inputRef","focus","selectionStart","selectionEnd","field__textarea--noresize","Select","InputColour","lib_default","rgba","hex","rgbHex","substr","InputText_Plain","GLOSS","glossaryLookup","getGloss","IndicatorEdit","FieldInputTextPlain","event","Field_FieldTextarea","Field_FieldButton","confirm","FieldCheckList","items","onItemChange","checked","BoardModalCard","_ref$isNew","isNew","setCanClose","archivedListID","setArchivedListID","useForm","register","triggerValidation","errors","getValues","setValue","hasErrors","isArchived","selectedIndicator","scrollIntoView","RAAUpdateID","setRAAUpdateID","boardValue","allIndicators","_getListDetailsFromTa3","listArray","onSaveClick","asyncToGenerator","regenerator_default","mark","_callee","wrap","_context","prev","next","sent","stop","this","taskHeader","currentList","find","titleLabel","indicatorsOfTask","_ref4","closeModalFooterButton","showHighLevelCheckList","checkListItems","preExpandedAccordionItems","_ref5","getNoLabelIndicators","highLevelName","data-test-card-view-modal","FieldInputTextReactHookForm","required","getTitlePlaceHolderByListId","getDescriptionPlaceHolderByListId","Field_FieldSelect","Field_FieldInputColour","src_Field_FieldCheckList","isChecked","dist_es","allowZeroExpanded","preExpanded","uuid","IndicatorEdit_form_component","marginTop","fromListID","modalStyles","overlay","right","bottom","backgroundColor","display","content","transform","maxHeight","overflowX","overflowY","Modal","setAppElement","ModalContainer","isOpen","contentLabel","disableClose","styles","onCloseClick","react_modal_lib_default","onRequestClose","FilterModal","hasHighLevelCards","disableNewlines","keyCode","which","preventDefault","EvaluationModal","ListEdit","onRemove","val","UpdateListsView","openByDefault","noTitleIDS","getNoTitleLists","ListEdit_form_component","HelpView","DownloadView","dateFns","fileName","kebabCase","toBackup","stringify","readme","blob","Blob","saveAs","UploadView","currentFile","setCurrentFile","currentError","setCurrentError","fileInputRef","useRef","onTargetClick","current","click","onGetData","files","endsWith","fileReader","disableUploadButton","FileDrop","onDrop","jsonFile","round","size","FileReader","onloadend","readAsText","Modals","canClose","targetIndicatorID","close","ModalContainer_component","BoardCardView_modal_component","EvaluationView_modal_component","FilterView_modal_component","UpdateListsView_modal_component","DownloadView_modal_component","Upload_modal_component","HelpView_modal_component","App","useModalState","boardState","Modals_component","ToolBar_component","react_router","path","Routes_Summary","Routes_Home","__webpack_require__","d","__webpack_exports__","src_resetApp","root","ReactDOM","render","src_App","afterFirstRender","args","unmountComponentAtNode","headings","lastScrollX","addEventListener","scrollX","i","updateQueryAll","fixHeadingOnXAxis","returnValue"],"mappings":"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","file":"static/js/main.672b80ce.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","import React, { useState, SetStateAction, Dispatch, useContext } from \"react\";\n\nexport const MODAL_CLOSED = \"Closed\";\n\nconst DEFAULT_APP_STATE = {\n modals: {\n modalOpen: MODAL_CLOSED,\n setModalOpen: () => {},\n closeModal: () => {}\n }\n} as AppStateType;\n\nconst AppContext = React.createContext(DEFAULT_APP_STATE);\nexport default AppContext;\n\nexport const useModalState = (): ModalsType => {\n const [modalOpen, setModalOpen] = useState(MODAL_CLOSED);\n const closeModal = React.useCallback(() => {\n if (setModalOpen) {\n setModalOpen(MODAL_CLOSED);\n }\n }, []);\n\n return {\n modalOpen,\n setModalOpen,\n closeModal\n };\n};\n\nexport const useAppContext = (): AppStateType => useContext(AppContext);\n\nexport type ModalOpenType =\n | \"Closed\"\n | EditBoardModalType\n | CreateCardModalType\n | EditIndicatorsType\n | ViewEditOrDeleteModalType\n | UpdateListsModalType\n | EditFiltersType\n | DownloadModalType\n | UploadModalType\n | HelpModalType;\n\nexport type CreateCardModalType = {\n type: \"CreateCard\";\n targetListID: string;\n targetId: string;\n};\n\nexport type ViewEditOrDeleteModalType = {\n type: \"ViewOrEditCard\" | \"DeleteCard\";\n targetId: string;\n indicatorID?: string | undefined;\n};\nexport type EditIndicatorsType = {\n type: \"EditIndicators\";\n targetId: string;\n};\nexport type EditFiltersType = {\n type: \"EditFilters\";\n};\nexport type EditBoardModalType = {\n type: \"EditBoardTitle\";\n};\nexport type UpdateListsModalType = {\n type: \"UpdateLists\";\n updateListID?: string | undefined;\n};\nexport type DownloadModalType = {\n type: \"Download\";\n};\nexport type UploadModalType = {\n type: \"Upload\";\n};\nexport type HelpModalType = {\n type: \"Help\";\n};\n\nexport type SetUseModalType = Dispatch>;\n\nexport type ModalsType = {\n modalOpen: ModalOpenType;\n setModalOpen: SetUseModalType;\n closeModal: () => void;\n};\n\nexport type AppStateType = {\n modals: ModalsType;\n};\n\nexport const DEFAULT_MODAL_OPEN = {\n targetId: undefined,\n type: undefined\n};\n","import React from \"react\";\nimport \"./IndicatorList.scss\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst IndicatorList = ({ children }: Props) => {\n return
{children}
;\n};\n\nexport default IndicatorList;\n","import {\n TasksWithStyleType,\n ActiveHighLevelOutcomeTaskIds,\n ListsType,\n ListType,\n TaskWithStyleType\n} from \"./Board.component\";\nimport {\n BoardStateType,\n FileContentType,\n ImportDataV1,\n VERSION_0_0,\n LatestImportData,\n ImportDataV0,\n ImportDataV2,\n ImportDataV3,\n VERSION_0_1,\n VERSION_0_2,\n VERSION_0_3\n} from \"./BoardState\";\nimport { CSSProperties } from \"react\";\n\nconst addStyleToTasks = (\n oldState: Pick & {\n highLevelListID: string;\n }\n): TasksWithStyleType => {\n const { lists, tasks, highLevelListID } = oldState;\n const taskTypesWithStyle: TasksWithStyleType = {};\n\n const highLevelTasksID: ActiveHighLevelOutcomeTaskIds =\n lists[highLevelListID].taskIds;\n // For long term outcome tasks\n highLevelTasksID.forEach((item) => {\n if (!tasks[item]) {\n // During import of data it's possible for Lists to refer to Tasks that don't exist if Lists was setState'd before Tasks.\n throw Error(\n `List refers to taskId (\"${item}\") that is not present in tasks`\n );\n }\n // updating long term outcome color within long term outcome tasks\n taskTypesWithStyle[item] = {\n ...tasks[item]\n };\n });\n // For non long term outcome tasks\n Object.keys(tasks).forEach((key) => {\n const { highLevelTaskIDs = [], id } = tasks[key];\n if (highLevelTasksID.indexOf(id) !== -1) return; //if this task is long term outcome, skip\n let colorTarget: string[] | undefined = undefined;\n //only assign a color if it is still a long term outcome\n\n highLevelTaskIDs.forEach((id) => {\n if (highLevelTasksID.indexOf(id) !== -1) {\n const colours = tasks[id].cardColour;\n if (colours) {\n if (!colorTarget) colorTarget = [];\n colorTarget = [...colorTarget, ...colours];\n }\n }\n });\n\n taskTypesWithStyle[key] = {\n ...tasks[key],\n cardColour: colorTarget\n };\n });\n return taskTypesWithStyle;\n};\n\ntype Props = {\n listID: string | undefined;\n highLevelListID: string | undefined;\n index: number;\n list: ListType | undefined;\n};\n\nconst getListDetailsFromTask = (taskID: string, lists: ListsType): Props => {\n let listID: string | undefined = undefined;\n let resultIndex: number = 0;\n let highLevelListID: string = \"\";\n let _list: ListType | undefined;\n\n Object.values(lists).forEach((list: ListType) => {\n const tasksInList = list.taskIds;\n const index = tasksInList.indexOf(taskID);\n if (index !== -1) {\n listID = list.id;\n resultIndex = index;\n _list = list;\n }\n if (list.isHighLevel) {\n highLevelListID = list.id;\n }\n });\n\n return {\n listID,\n index: resultIndex,\n list: _list,\n highLevelListID\n };\n};\n\nconst upgradev0Tov1 = (v0Data: ImportDataV0): ImportDataV1 => {\n return { ...v0Data, indicators: {} };\n};\n\nconst upgradev1Tov2 = (v1Data: ImportDataV1): ImportDataV2 => {\n const rawData = { ...v1Data };\n const { tasks } = rawData;\n // we might need to look into versioned types?\n Object.values(tasks).forEach((task: TaskWithStyleType) => {\n // @ts-ignore\n const highLevelTaskID = task.highLevelTaskID;\n if (highLevelTaskID) {\n const idAsString = String(highLevelTaskID);\n task.highLevelTaskIDs = [idAsString];\n // @ts-ignore\n task.highLevelTaskID = null;\n }\n task.cardColour = task.cardColour ? [String(task.cardColour)] : undefined;\n });\n return rawData;\n};\n\nconst upgradev2Tov3 = (v2Data: ImportDataV2): ImportDataV3 => {\n const rawData = { ...v2Data };\n const { lists } = rawData;\n const shouldShowIndicators = [\"list-3\", \"list-4\", \"list-5\"];\n\n for (let [key, list] of Object.entries(lists)) {\n const { id } = list;\n const isStandard = shouldShowIndicators.indexOf(id) === -1;\n if (isStandard) {\n list.type = \"standard\";\n } else {\n list.type = \"outcome\";\n }\n }\n\n return rawData;\n};\n\nconst assessFormat = (json: FileContentType): LatestImportData => {\n const { version, data } = json;\n if (!version || version === \"\")\n throw Error(`Invalid file, it should have a valid version.`);\n if (!data) {\n throw Error(`Invalid file, it should have valid data.`);\n }\n let result = data;\n\n const versionHistory = [VERSION_0_0, VERSION_0_1, VERSION_0_2, VERSION_0_3];\n const parsers = [upgradev0Tov1, upgradev1Tov2, upgradev2Tov3];\n\n const indexFound = versionHistory.indexOf(version);\n for (let index = indexFound; index < parsers.length; index++) {\n const parse = parsers[index];\n result = parse(result);\n }\n\n return result;\n};\n\ntype FileReaderProps = {\n result: string | ArrayBuffer | null;\n onImportData: Function;\n};\n\nconst handleFileRead = ({ result, onImportData }: FileReaderProps) => {\n const resultContent = result;\n let resJson: FileContentType = {\n readme: \"\",\n version: \"\"\n };\n if (typeof resultContent !== \"string\") return;\n try {\n // we need to remove spaces(\\s) at the end of a line (\\n) and replace them with just a linebreak\n const removeWhiteSpaceAndEnters = resultContent.replace(/\\s\\\\n/g, \"\\\\n\");\n resJson = JSON.parse(removeWhiteSpaceAndEnters);\n const format = assessFormat(resJson);\n console.log({ format });\n onImportData(format);\n } catch (e) {\n alert(`Invalid file. (code \"${e.toString()}\" from data ${resultContent})`);\n }\n};\n\nfunction loadJSON(filePath: string, callback: Function) {\n var xobj = new XMLHttpRequest();\n xobj.overrideMimeType(\"application/json\");\n xobj.open(\"GET\", filePath, true);\n xobj.onreadystatechange = function () {\n if (xobj.readyState === 4 && xobj.status === 200) {\n // .open will NOT return a value but simply returns undefined in async mode so use a callback\n callback(xobj.responseText);\n }\n };\n xobj.send(null);\n}\n\nconst BoardHasData = (lists: ListsType) =>\n Object.keys(lists).some((key) => {\n return lists[key].taskIds.length !== 0;\n });\n\nconst tooltipStyle: CSSProperties = {\n background: \"hsla(0, 0%, 0%, 0.75)\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n maxWidth: \"100vw\",\n whiteSpace: \"initial\",\n padding: \"1em 1em\",\n zIndex: 2000\n};\n\nconst createLinkageStyle = (task: TaskWithStyleType, list: ListType): {} => {\n const widthForColours = 20;\n let borderStyle: any = {\n paddingLeft: `${widthForColours}px`,\n border: 0\n };\n if (task.cardColour) {\n const colourWidth = widthForColours / task.cardColour.length;\n\n let gradient = \"to right\";\n if (list.isHighLevel) {\n borderStyle.border = `4px solid ${task.cardColour[0]}`;\n } else {\n const sortedColours = [...task.cardColour];\n // sort so colours always append in same order\n sortedColours.sort();\n\n sortedColours.forEach((colour, index) => {\n gradient += `,${colour} ${index * colourWidth}px,${colour} ${\n (index + 1) * colourWidth\n }px `;\n });\n const lastStop = (sortedColours.length - 1) * colourWidth;\n borderStyle.backgroundImage = `linear-gradient( ${gradient} ,#FFFFFF ${lastStop}px)`;\n borderStyle.paddingLeft = `${lastStop + colourWidth + 10}px`;\n borderStyle.borderBottomLeftRadius = 0;\n borderStyle.borderTopLeftRadius = 0;\n }\n }\n\n return borderStyle;\n};\n\nexport {\n createLinkageStyle,\n addStyleToTasks,\n getListDetailsFromTask,\n assessFormat,\n loadJSON,\n handleFileRead,\n BoardHasData,\n tooltipStyle\n};\n","import React from \"react\";\nimport Tooltip from \"@reach/tooltip\";\n// and the styles\nimport \"@reach/tooltip/styles.css\";\n\nimport { IndicatorType } from \"../Board.component\";\nimport \"./IndicatorLabel.scss\";\nimport { tooltipStyle } from \"../Board.utils\";\n\nconst IndicatorLabel = ({ title, label, onClick, id }: IndicatorType) => {\n return (\n \n ) => {\n if(onClick)onClick(e,id);\n }}\n className=\"indicator-label\"\n >\n {label}\n \n \n );\n};\n\nexport default IndicatorLabel;\n","import React from \"react\";\nimport { Draggable } from \"react-beautiful-dnd\";\nimport classnames from \"classnames\";\nimport { IndicatorsType, TaskWithStyleType } from \"../Board.component\";\nimport AppState, { ModalsType } from \"../../AppState\";\nimport IndicatorList from \"./IndicatorList.component\";\nimport IndicatorLabel from \"./IndicatorLabel.component\";\nimport \"./BoardCard.scss\";\n\ntype ContainerProps = {\n task: TaskWithStyleType;\n index: number;\n isNewTask: boolean;\n indicators: IndicatorsType;\n isDragDisabled?: boolean;\n showIndicators: boolean;\n isHighLevel?: boolean;\n};\n\nconst BoardCardContainer = (props: ContainerProps) => (\n \n {(value) => {\n return (\n \n );\n }}\n \n);\n\ntype Props = ContainerProps & {\n modals: ModalsType;\n};\n\nconst BoardCard = ({\n task,\n index,\n modals,\n isNewTask,\n indicators,\n isDragDisabled,\n showIndicators,\n isHighLevel\n}: Props) => {\n return (\n \n {(provided, snapshot) => {\n const onCardClick = () => {\n openModal();\n };\n const openModal = (indicatorID: string | undefined = undefined) => {\n if (!modals.setModalOpen) return;\n modals.setModalOpen({\n type: \"ViewOrEditCard\",\n targetId: task.id,\n indicatorID\n });\n };\n const indicatorIDs: string[] = task.indicators || [];\n let extraStyle = {\n \"boardcard--dragging\": snapshot.isDragging,\n bounceIn: isNewTask\n };\n\n const onIndicatorClick = (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n openModal(id);\n };\n\n const widthForColours = 30;\n let borderStyle: any = {\n paddingLeft: `${widthForColours}px`,\n border: 0\n };\n if (task.cardColour) {\n const colourWidth = widthForColours / task.cardColour.length;\n\n let gradient = \"to right\";\n if (isHighLevel) {\n borderStyle.border = `4px solid ${task.cardColour[0]}`;\n } else {\n const sortedColours = [...task.cardColour];\n // sort so colours always append in same order\n sortedColours.sort();\n\n sortedColours.forEach((colour, index) => {\n gradient += `,${colour} ${index * colourWidth}px,${colour} ${\n (index + 1) * colourWidth\n }px `;\n });\n const lastStop = (sortedColours.length - 1) * colourWidth;\n borderStyle.backgroundImage = `linear-gradient( ${gradient} ,#FFFFFF ${lastStop}px)`;\n borderStyle.paddingLeft = `${lastStop + colourWidth}px`;\n }\n }\n return (\n \n \n
\n {task.description}\n
\n {showIndicators && (\n \n {indicatorIDs.map((indicatorID: string) => {\n return (\n \n );\n })}\n \n )}\n \n );\n }}\n \n );\n};\n\nexport const taskIdToCardId = (taskId: string): string => `card-${taskId}`;\n\nexport const scrollToCard = (cardId: string) => {\n setTimeout(\n () => {\n const toolbarSelector = \".toolbar\";\n const toolbar = document.querySelector(toolbarSelector);\n const id = taskIdToCardId(cardId);\n const newCardElement = document.getElementById(id);\n\n if (!newCardElement || !toolbar) {\n console.error(\n `Unable to scroll to new card with id=\"${id}\" or find toolbar with \"${toolbarSelector}\"`\n );\n return;\n }\n\n const windowRect = document.body.getBoundingClientRect();\n\n const rect = newCardElement.getBoundingClientRect();\n\n const offsetY = rect.top - windowRect.top;\n const offsetX = rect.left - windowRect.left;\n //offset the y to ensure the header isn't covering it up\n const headerOffset = 80;\n window.scrollTo(offsetX, offsetY - headerOffset);\n },\n 250 // must be enough time for React to render card\n );\n};\n\nexport default BoardCardContainer;\n","import pick from \"lodash/pick\";\nimport { DropResult } from \"react-beautiful-dnd\";\nimport { ListType, ListsType } from \"./Board.component\";\nimport { BoardStateType } from \"./BoardState\";\n\nconst dragEndReducer = (\n oldState: Pick, // we only care about the Lists part of the state so we'll pick just lists to make it easier to mock this object\n result: FilteredResult\n): BoardStateType[\"lists\"] | undefined => {\n const { lists } = oldState;\n const { destination, source } = result;\n\n if (!destination) {\n // dropped outside of any List\n return;\n }\n\n if (\n // dropped at same place\n destination.droppableId === source.droppableId &&\n destination.index === source.index\n ) {\n return;\n }\n\n const startList: ListType = lists[source.droppableId];\n const finishList: ListType = lists[destination.droppableId];\n const isSameList = startList === finishList;\n\n // move within same list\n if (isSameList) {\n return moveWithinList(startList, source.index, destination.index, lists);\n }\n\n // Moving from one list to another\n return moveToList(\n startList,\n source.index,\n finishList,\n destination.index,\n lists\n );\n};\n\nexport const moveWithinList = (\n startList: ListType,\n from: number,\n to: number,\n lists: ListsType\n) => {\n const orderedTasksInList = moveTaskWithinList(startList.taskIds, from, to);\n const updatedList = updateList(startList, orderedTasksInList);\n const collection = updateCollection(lists, updatedList);\n return collection;\n};\n\nexport const moveToList = (\n startList: ListType,\n originalIndex: number,\n finishList: ListType,\n destinationIndex: number,\n lists: ListsType\n) => {\n //remove from previous List\n\n const taskId = startList.taskIds[originalIndex];\n const startTaskIds: string[] = removeFromList(\n startList.taskIds,\n originalIndex\n );\n const newStart: ListType = updateList(startList, startTaskIds);\n\n // add to current List\n const finishTaskIds = addToList(\n taskId,\n finishList.taskIds,\n finishList,\n destinationIndex\n );\n const newFinish = updateList(finishList, finishTaskIds.taskIds);\n\n return {\n ...lists,\n [newStart.id]: newStart,\n [newFinish.id]: newFinish\n };\n};\n\nexport const moveTaskWithinList = (\n taskList: string[],\n fromIndex: number,\n toIndex: number\n) => {\n const newTaskIds = [...taskList];\n const removedItem = newTaskIds.splice(fromIndex, 1)[0];\n newTaskIds.splice(toIndex, 0, removedItem);\n\n return newTaskIds;\n};\n\nexport const addToList = (\n taskId: string,\n taskIds: string[],\n destinationList: ListType,\n position: number\n) => {\n const finishTaskIds = Array.from(taskIds);\n finishTaskIds.splice(position, 0, taskId);\n\n return {\n ...destinationList,\n taskIds: finishTaskIds\n };\n};\n\nexport const updateList = (list: ListType, taskList: string[]): ListType => {\n return {\n ...list,\n taskIds: taskList\n };\n};\n\nexport const updateCollection = (\n list: ListsType,\n updatedList: ListType\n): ListsType => {\n return {\n ...list,\n [updatedList.id]: updatedList\n };\n};\n\nexport const removeFromList = (list: string[], index: number): string[] => {\n const totalList = [...list];\n totalList.splice(index, 1);\n return totalList;\n};\n\nexport type FilteredResult = Pick<\n DropResult,\n \"destination\" | \"source\" | \"draggableId\"\n>;\n\nexport const filterResult = (result: DropResult): FilteredResult => {\n return pick(result, [\"destination\", \"source\", \"draggableId\"]);\n};\n\nexport default dragEndReducer;\n","import pick from \"lodash/pick\";\nimport { DropResult } from \"react-beautiful-dnd\";\nimport { BoardStateType } from \"../Board/BoardState\";\n\nconst dragListEndReducer = (\n oldState: Pick, // we only care about the Lists part of the state so we'll pick just lists to make it easier to mock this object\n result: FilteredResult\n): BoardStateType[\"listsOrder\"] | undefined => {\n const { listsOrder } = oldState;\n const { destination, source } = result;\n\n if (!destination) {\n // dropped outside of lists\n return listsOrder;\n }\n\n if (\n // dropped at same place\n destination.droppableId === source.droppableId &&\n destination.index === source.index\n ) {\n return listsOrder;\n }\n\n\n const newListsOrder = moveList(listsOrder, source.index, destination.index);\n return newListsOrder;\n};\n\nexport const moveList = (\n listsOrder: string[],\n fromIndex: number,\n toIndex: number\n) => {\n const newListsOrder = [...listsOrder];\n const removedItem = newListsOrder.splice(fromIndex, 1)[0];\n newListsOrder.splice(toIndex, 0, removedItem);\n\n return newListsOrder;\n};\n\nexport type FilteredResult = Pick<\n DropResult,\n \"destination\" | \"source\" | \"draggableId\"\n>;\n\nexport const filterResult = (result: DropResult): FilteredResult => {\n return pick(result, [\"destination\", \"source\", \"draggableId\"]);\n};\n\nexport default dragListEndReducer;\n","import { BoardStateType } from \"./BoardState\";\nimport { TasksType, ListsType, TaskWithStyleType } from \"./Board.component\";\n\nconst createCardReducer = (\n oldState: Pick,\n card: TaskWithStyleType,\n listId: string\n): CreateCardReducerType => {\n const { lists, tasks } = oldState;\n const { id, label, description, highLevelTaskIDs, indicators } = card;\n\n const newTasks: TasksType = {\n ...tasks,\n [id]: { id, label, description, highLevelTaskIDs, indicators }\n };\n //TODO: replace list-1 with the target list\n const newLists: ListsType = {\n ...lists,\n [listId]: { ...lists[listId], taskIds: [...lists[listId].taskIds, id] }\n };\n\n return { tasks: newTasks, lists: newLists, newTaskId: id };\n};\n\nexport type CreateCardReducerType = {\n lists: ListsType;\n tasks: TasksType;\n newTaskId: string;\n};\n\nexport default createCardReducer;\n","import { TaskSuggestions, TaskSuggestion } from \"./BoardState\";\n\n// This data was ported from the previous app from \"Suggestions.js\"\n\nconst outcomeLevel: TaskSuggestion[] = [\n { value: \"High\", label: \"Long Term Outcome\" },\n { value: \"Intermediate\", label: \"Medium Term Outcome\" },\n { value: \"Low\", label: \"Short Term Outcome\" },\n { value: \"Output\", label: \"Output\" },\n { value: \"Input\", label: \"Input\" }\n];\n\nconst dataSourceOptions: TaskSuggestion[] = [\n { value: \"MoE\", label: \"MoE\" },\n { value: \"MPI\", label: \"MPI\" },\n { value: \"TEC\", label: \"TEC\" }\n];\n\nconst highOutcomeName: TaskSuggestion[] = [\n {\n value: \"Improved outcomes for students\",\n label: \"Improved outcomes for students\"\n },\n {\n value: \"Positive impact on workforce\",\n label: \"Positive impact on workforce\"\n },\n {\n value: \"Positive impacts on schools\",\n label: \"Positive impacts on schools\"\n },\n {\n value: \"Positive impacts on practice\",\n label: \"Positive impacts on practice\"\n },\n {\n value: \"Students enter workforce or further study\",\n label: \"Students enter workforce or further study\"\n },\n {\n value: \"Equity & Excellence in Education\",\n label: \"Equity & Excellence in Education\"\n },\n {\n value: \"High Quality Teaching and Schooling\",\n label: \"High Quality Teaching and Schooling\"\n },\n {\n value: \"Informed Decisions by Teachers\",\n label: \"Informed Decisions by Teachers\"\n }\n];\nconst intermediateOutcomeName: TaskSuggestion[] = [\n {\n value: \"PRA recognised as challenging and rewarding pathway\",\n label: \"PRA recognised as challenging and rewarding pathway\"\n },\n { value: \"School improvement\", label: \"School improvement\" },\n {\n value: \"Reduced incidence of statutory interventions\",\n label: \"Reduced incidence of statutory interventions\"\n },\n\n {\n value:\n \"Vote Education (and individual appropriations, programmes, etc) is funded at the appropriate level\",\n label:\n \"Vote Education (and individual appropriations, programmes, etc) is funded at the appropriate level\"\n },\n {\n value: \"Teaching is Enhanced Through Learning\",\n label: \"Teaching is Enhanced Through Learning\"\n },\n {\n value:\n \"The Sector Sees Value in EDK's Outputs (Hence Happy to Share Data With Us)\",\n label:\n \"The Sector Sees Value in EDK's Outputs (Hence Happy to Share Data With Us)\"\n },\n {\n value:\n \"There are fewer emergencies (because we plan ahead & see things coming)\",\n label:\n \"There are fewer emergencies (because we plan ahead & see things coming)\"\n },\n {\n value: \"Policy design and decisions\",\n label: \"Policy design and decisions\"\n },\n {\n value: \"Evidence available and accessible\",\n label: \"Evidence available and accessible\"\n }\n];\nconst lowOutcomeName: TaskSuggestion[] = [\n {\n value: \"Improved school climate and culture\",\n label: \"Improved school climate and culture\"\n },\n {\n value: \"Improved governance and management capability\",\n label: \"Improved governance and management capability\"\n },\n {\n value: \"Change effectively implemented\",\n label: \"Change effectively implemented\"\n },\n {\n value: \"Mitigation of risks to the school\",\n label: \"Mitigation of risks to the school\"\n },\n {\n value: \"Improved Collaboration Between Teams in EDK\",\n label: \"Improved Collaboration Between Teams in EDK\"\n },\n {\n value: \"Collaboration with the rest of the Ministry \",\n label: \"Collaboration with the rest of the Ministry \"\n },\n { value: \"Monitoring Delivery\", label: \"Monitoring Delivery\" },\n { value: \"Achieving Deadlines\", label: \"Achieving Deadlines\" },\n {\n value: \"Understanding Drivers of Population\",\n label: \"Understanding Drivers of Population\"\n },\n {\n value:\n \"Engaged with Sector to Understand Context we are Measuring & (one of) Customer we are Producing Evidence for. \",\n label:\n \"Engaged with Sector to Understand Context we are Measuring & (one of) Customer we are Producing Evidence for. \"\n },\n {\n value:\n \"All Output is Free of Material Error at the Point at Which it is Submitted for Sign-out, Published on Ed Counts or Provided to Customers as Final\",\n label:\n \"All Output is Free of Material Error at the Point at Which it is Submitted for Sign-out, Published on Ed Counts or Provided to Customers as Final\"\n }\n];\nconst outputName: TaskSuggestion[] = [\n { value: \"Boards access the PRA\", label: \"Boards access the PRA\" },\n {\n value: \"Highly effective, experienced principals apply\",\n label: \"Highly effective, experienced principals apply\"\n },\n {\n value:\n \"Clear goals and effective relationships established between stakeholders\",\n label:\n \"Clear goals and effective relationships established between stakeholders\"\n },\n {\n value: \"Change process and plan established with supports in place\",\n label: \"Change process and plan established with supports in place\"\n },\n\n { value: \"The Evaluation App\", label: \"The Evaluation App\" },\n { value: \"Forecasts ECE/School Roll\", label: \"Forecasts ECE/School Roll\" },\n { value: \"Causal Analysis\", label: \"Causal Analysis\" },\n {\n value: \"Evaluation Plans for all Project Initiatives \",\n label: \"Evaluation Plans for all Project Initiatives \"\n },\n { value: \"Descriptive Statistics\", label: \"Descriptive Statistics\" },\n {\n value:\n \"We Have a set of Evidence Priorities & a Route Map for Delivering Them\",\n label:\n \"We Have a set of Evidence Priorities & a Route Map for Delivering Them\"\n }\n];\nconst inputName: TaskSuggestion[] = [\n {\n value: \"Robust criteria and application processes\",\n label: \"Robust criteria and application processes\"\n },\n {\n value:\n \"Resources and supports for boards, PRA principals, and local ministry staff\",\n label:\n \"Resources and supports for boards, PRA principals, and local ministry staff\"\n },\n {\n value: \"Clear relationship of the PRA to other interventions available\",\n label: \"Clear relationship of the PRA to other interventions available\"\n },\n {\n value:\n \"Across EDK, we Know Exactly who to go, for What, and who Needs our Outputs\",\n label:\n \"Across EDK, we Know Exactly who to go, for What, and who Needs our Outputs\"\n },\n {\n value: \"Our People are Highly Capable Analytical Machines\",\n label: \"Our People are Highly Capable Analytical Machines\"\n }\n];\nconst indicatorTitle: TaskSuggestion[] = [\n {\n value: \"Significant positive shifts in student achievement\",\n label: \"Significant positive shifts in student achievement\"\n },\n { value: \"Improved enrolment\", label: \"Improved enrolment\" },\n { value: \"Improved attendance\", label: \"Improved attendance\" },\n {\n value: \"Status of teaching enhanced\",\n label: \"Status of teaching enhanced\"\n },\n {\n value: \"Improved recruitment and retention\",\n label: \"Improved recruitment and retention\"\n },\n {\n value: \"Stronger career paths established\",\n label: \"Stronger career paths established\"\n },\n {\n value: \"Enhanced school resilience and capability\",\n label: \"Enhanced school resilience and capability\"\n },\n {\n value: \"High levels of cooperation and collaboration across schools\",\n label: \"High levels of cooperation and collaboration across schools\"\n },\n {\n value: \"Knowledge shared, evolving, accessible, and used\",\n label: \"Knowledge shared, evolving, accessible, and used\"\n },\n {\n value: \"ERO review cycle interval increases\",\n label: \"ERO review cycle interval increases\"\n },\n { value: \"Staff turnoff stabilises\", label: \"Staff turnoff stabilises\" },\n {\n value: \"Greater participation of kahui ako\",\n label: \"Greater participation of kahui ako\"\n },\n {\n value: \"Changes in classroom practice\",\n label: \"Changes in classroom practice\"\n },\n { value: \"Improved board stability\", label: \"Improved board stability\" },\n {\n value: \"Stakeholders more confident about the value of the school\",\n label: \"Stakeholders more confident about the value of the school\"\n },\n {\n value: \"Professional accountability and learning visible in school culture\",\n label: \"Professional accountability and learning visible in school culture\"\n },\n {\n value: \"Improvements in student and staff wellbeing\",\n label: \"Improvements in student and staff wellbeing\"\n },\n {\n value: \"Clear educational focus emerging\",\n label: \"Clear educational focus emerging\"\n },\n {\n value: \"Boards getting strong principal support\",\n label: \"Boards getting strong principal support\"\n },\n {\n value: \"Board responding more effectively to more challenging situations\",\n label: \"Board responding more effectively to more challenging situations\"\n },\n {\n value: \"Planning to manage sustainable change visible\",\n label: \"Planning to manage sustainable change visible\"\n },\n {\n value:\n \"School wide management and instructional leadership focused on student achievement\",\n label:\n \"School wide management and instructional leadership focused on student achievement\"\n },\n { value: \"Increased demand for PLD\", label: \"Increased demand for PLD\" },\n {\n value:\n \"Skills, capabilities, systems, and resources in place for school transformation\",\n label:\n \"Skills, capabilities, systems, and resources in place for school transformation\"\n },\n {\n value: \"Strengthened board self-review processes\",\n label: \"Strengthened board self-review processes\"\n },\n {\n value: \"Conditions for improved classroom practise visible\",\n label: \"Conditions for improved classroom practise visible\"\n },\n {\n value: \"PRA principal continues to meet allowance criteria\",\n label: \"PRA principal continues to meet allowance criteria\"\n },\n {\n value: \"School meets fewer of the PRA eligibility criteria\",\n label: \"School meets fewer of the PRA eligibility criteria\"\n },\n {\n value: \"Schools meeting the criteria for the PRA program\",\n label: \"Schools meeting the criteria for the PRA program\"\n },\n {\n value: \"Sufficient supply of eligible applicants\",\n label: \"Sufficient supply of eligible applicants\"\n },\n {\n value: \"Performance agreements reflect specific needs of school\",\n label: \"Performance agreements reflect specific needs of school\"\n },\n {\n value: \"Collaborative review of the pressures existing\",\n label: \"Collaborative review of the pressures existing\"\n },\n {\n value:\n \"Change plan integrated into the annual planning and accountability documents\",\n label:\n \"Change plan integrated into the annual planning and accountability documents\"\n },\n { value: \"Schools are identified\", label: \"Schools are identified\" },\n {\n value: \"Having an expert panel to assess applicant eligibility\",\n label: \"Having an expert panel to assess applicant eligibility\"\n },\n {\n value: \"Operation guidelines for stakeholders available\",\n label: \"Operation guidelines for stakeholders available\"\n },\n {\n value:\n \"Role of the PRA relative to other supports for schools in needs is clearly defined and understood\",\n label:\n \"Role of the PRA relative to other supports for schools in needs is clearly defined and understood\"\n },\n {\n value: \"International Reputation for Research and Evaluation\",\n label: \"International Reputation for Research and Evaluation\"\n },\n { value: \"Delivery, Trust and Brand\", label: \"Delivery, Trust and Brand\" },\n { value: \"A Learning System\", label: \"A Learning System\" }\n];\nconst dataMeasurement: TaskSuggestion[] = [\n { value: \"Years\", label: \"Years\" },\n { value: \"Student Achievement\", label: \"Student Achievement\" },\n { value: \"Percentage of Attendence\", label: \"Percentage of Attendence\" }\n];\nconst dataCollectionMethod: TaskSuggestion[] = [\n { value: \"Survey\", label: \"Survey\" },\n { value: \"Database\", label: \"Database\" },\n { value: \"School Marks\", label: \"School Marks\" }\n];\nconst meansOfVerification: TaskSuggestion[] = [\n { value: \"Survey\", label: \"Survey\" },\n { value: \"Database\", label: \"Database\" },\n { value: \"School Marks\", label: \"School Marks\" }\n];\nconst personResponsibleForCollection: TaskSuggestion[] = [\n { value: \"Survey\", label: \"Survey\" },\n { value: \"Database\", label: \"Database\" },\n { value: \"School Marks\", label: \"School Marks\" }\n];\nconst costOfDataCollection: TaskSuggestion[] = [\n { value: \"$1000\", label: \"$1000\" },\n { value: \"$2000\", label: \"$2000\" },\n { value: \"$3000\", label: \"$3000\" }\n];\nconst whenWillCollectionTakePlace: TaskSuggestion[] = [\n { value: \"April\", label: \"April\" },\n { value: \"May\", label: \"May\" },\n { value: \"June\", label: \"June\" }\n];\nconst measurementOfVerification: TaskSuggestion[] = [\n { value: \"R\", label: \"Red\" },\n { value: \"G\", label: \"Green\" },\n { value: \"B\", label: \"Blue\" }\n];\nconst indicatorDescription: TaskSuggestion[] = [];\n\nexport const DEFAULT_TASK_SUGGESTIONS: TaskSuggestions = {\n indicatorDescription,\n outcomeLevel,\n High: highOutcomeName,\n Intermediate: intermediateOutcomeName,\n Low: lowOutcomeName,\n Output: outputName,\n Input: inputName,\n dataCollectionMethod,\n dataMeasurement,\n meansOfVerification,\n personResponsibleForCollection,\n dataSource: dataSourceOptions,\n cost: costOfDataCollection,\n whenWillDataBeCollected: whenWillCollectionTakePlace,\n measurementOfVerification: measurementOfVerification,\n indicatorTitle: indicatorTitle\n};\n","import { BoardStateType } from \"./BoardState\";\nimport { ListsType, ListType } from \"./Board.component\";\nimport {\n removeFromList,\n updateList,\n updateCollection\n} from \"./Board.DragEnd.reducer\";\n\nconst archiveCardReducer = (\n oldState: Pick,\n cardID: string\n): ArchiveCardReducerType => {\n const { lists } = oldState;\n let newState = { lists: { ...lists } } as ArchiveCardReducerType;\n //get list that contains the id\n const allLists = Object.values(lists) as ListType[];\n allLists.forEach((list: ListType) => {\n const taskIndexInList = list.taskIds.indexOf(cardID);\n\n if (taskIndexInList > -1) {\n const newTasksList: string[] = removeFromList(\n list.taskIds,\n taskIndexInList\n );\n\n const updatedList: ListType = updateList(list, newTasksList);\n const updatedLists: ListsType = updateCollection(lists, updatedList);\n newState = { lists: updatedLists, archivedFromList: list.id };\n }\n });\n\n return newState;\n};\n\nexport type ArchiveCardReducerType = {\n lists: ListsType;\n archivedFromList: string | undefined;\n};\n\nexport default archiveCardReducer;\n","import { TaskType, TaskWithStyleType } from \"./Board.component\";\n\nconst updateCardReducer = (\n taskToBeUpdated: TaskType,\n fieldsToBeUpdated: Partial\n): TaskType => {\n const updatedTask = {\n ...taskToBeUpdated,\n ...fieldsToBeUpdated\n } as TaskType;\n\n return updatedTask;\n};\n\nexport default updateCardReducer;\n","import { TaskType } from \"./Board.component\";\n\nconst updateHighLevelLink = (\n taskToBeUpdated: TaskType,\n highLevelTaskID: string,\n shouldAdd: boolean\n): TaskType => {\n const list = taskToBeUpdated.highLevelTaskIDs\n ? [...taskToBeUpdated.highLevelTaskIDs]\n : [];\n const foundIndex = list.indexOf(highLevelTaskID);\n\n if (shouldAdd) {\n if (foundIndex === -1) {\n list.push(highLevelTaskID);\n }\n } else {\n if (foundIndex !== -1) {\n list.splice(foundIndex, 1);\n }\n }\n\n const updatedTask = {\n ...taskToBeUpdated\n } as TaskType;\n\n updatedTask.highLevelTaskIDs = list;\n\n return updatedTask;\n};\n\nexport default updateHighLevelLink;\n","import { TaskType } from \"./Board.component\";\n\nconst addIndicatorReducer = (\n oldState: Pick,\n indicatorID: string\n): Pick => {\n const ids = oldState.indicators ? [...oldState.indicators] : [];\n\n if (ids.indexOf(indicatorID) === -1) {\n ids.push(indicatorID);\n return { ...oldState, indicators: ids };\n } else {\n return oldState;\n }\n};\n\nexport default addIndicatorReducer;\n","import { TaskType } from \"./Board.component\";\n\nconst removeIndicatorReducer = (\n oldState: Pick,\n indicatorID: string\n): Pick => {\n const ids = oldState.indicators ? [...oldState.indicators] : [];\n\n const indicatorIndex = ids.indexOf(indicatorID);\n\n if (indicatorIndex !== -1) {\n ids.splice(indicatorIndex, 1);\n return { ...oldState, indicators: ids };\n }\n\n return oldState;\n};\n\nexport default removeIndicatorReducer;\n","import { IndicatorsType, IndicatorType } from \"../Board/Board.component\";\n\nconst addIndicatorToListReducer = (\n oldState: IndicatorsType,\n newIndicator: IndicatorType\n): IndicatorsType => {\n const newState = { ...oldState };\n newState[newIndicator.id] = { ...newIndicator };\n return newState;\n};\n\nexport default addIndicatorToListReducer;\n","import { IndicatorsType } from \"../Board/Board.component\";\n\nconst removeIndicatorFromListReducer = (\n oldState: IndicatorsType,\n indicatorID: string\n): IndicatorsType => {\n const newState = { ...oldState };\n\n if (newState[indicatorID]) {\n delete newState[indicatorID];\n\n return newState;\n }\n return oldState;\n};\n\nexport default removeIndicatorFromListReducer;\n","import { IndicatorType } from \"../Board/Board.component\";\n\nconst updateIndicatorReducer = (\n oldState: IndicatorType,\n newIndicator: Partial\n): IndicatorType => {\n return { ...oldState, ...newIndicator };\n};\n\nexport default updateIndicatorReducer;\n","import { ListType, ListsType, TaskType } from \"./Board.component\";\nimport { moveToList } from \"./Board.DragEnd.reducer\";\nimport { getListDetailsFromTask } from \"./Board.utils\";\n\nconst moveTaskToListReducer = (\n lists: ListsType,\n task: TaskType,\n targetListID: string\n): ListsType => {\n const { listID, index } = getListDetailsFromTask(task.id, lists);\n if (listID) {\n const startList: ListType = lists[listID];\n const finishList: ListType = lists[targetListID];\n const isSameList = startList === finishList;\n\n if (isSameList) {\n return lists;\n }\n\n // Moving\n return moveToList(\n startList,\n index,\n finishList,\n finishList.taskIds.length,\n lists\n );\n } else {\n // card is not yet part of list\n const defaultList: ListType = lists[targetListID];\n const updatedTasks = defaultList.taskIds\n ? [task.id, ...defaultList.taskIds]\n : [task.id];\n\n defaultList.taskIds = updatedTasks;\n\n return {\n ...lists,\n [defaultList.id]: { ...defaultList }\n } as ListsType;\n }\n};\n\nexport default moveTaskToListReducer;\n","import {\n TasksType,\n ListsType,\n ListTitleType,\n ListCategoryType\n} from \"./Board.component\";\n\nconst filterListsReducer = (\n lists: ListsType,\n tasks: TasksType,\n filter: FilterType | undefined\n): ListsType => {\n if (!filter) return lists;\n\n //check each task for each list\n\n const updatedLists = { ...lists };\n\n const listArray = Object.values(lists);\n listArray.forEach((list) => {\n const newList = { ...list };\n //filter the task id's that adhere to filter criteria\n const filteredTasks = list.taskIds.filter((taskID) => {\n let filterMatches;\n const task = tasks[taskID];\n //loop through all filter settings\n\n //get filter setting keys and values\n Object.keys(filter).forEach((key: string) => {\n //if matches, set to true\n const castedKey = key as keyof FilterType;\n if (key in task) {\n //same key and value?\n const prop = task[castedKey];\n const filterValue = filter[castedKey];\n if (prop === filterValue) {\n filterMatches = true;\n }\n //same array value?\n if (Array.isArray(prop)) {\n //specific case: we safe highLevelTaskIds when cards get moved into the HighLevel row - this results in unwatned filter results!\n\n const isHighLevelTaskIDs =\n castedKey === \"highLevelTaskIDs\" && list.isHighLevel;\n if (\n !isHighLevelTaskIDs &&\n filterValue &&\n prop.indexOf(filterValue) > -1\n ) {\n filterMatches = true;\n }\n }\n // in the future we can check indicator ID array here by looping over it\n }\n });\n\n // if task isn't in an outcome List, return it as part of the filtered list\n\n const outcome: ListCategoryType = \"outcome\";\n const isOutComeList = list.type === outcome;\n\n if (!isOutComeList) {\n filterMatches = true;\n }\n\n return filterMatches;\n });\n newList.taskIds = [...filteredTasks];\n updatedLists[newList.id] = newList;\n });\n return updatedLists;\n};\n\nexport type FilterType = {\n highLevelTaskIDs?: string;\n id?: string;\n};\n\nexport default filterListsReducer;\n","import { uniqueId } from \"lodash\";\nimport hexRgb from \"hex-rgb\";\n\n//Temporary uuid generator\nexport const idGen = (): string =>\n uniqueId(\"idGen_\" + Date.now() / 1000).toUpperCase();\n\nexport function getBrightnessHex(colour: string): number {\n const rgb = hexRgb(colour);\n return getBrightness(rgb.red, rgb.green, rgb.blue);\n}\n\nexport function getBrightness(r: number, g: number, b: number): number {\n return Math.sqrt(\n Math.pow(r * 0.299, 2) + Math.pow(g * 0.587, 2) + Math.pow(b * 0.114, 2)\n );\n}\n\nexport const replaceLinks = (html: string = \"\") => {\n return html.replace(\n /([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi,\n (match, space, url) => {\n var hyperlink = url;\n if (!hyperlink.match(\"^https?://\")) {\n hyperlink = \"https://\" + hyperlink;\n }\n const aTag = document.createElement(\"a\");\n aTag.setAttribute(\"href\", hyperlink);\n aTag.textContent = url;\n aTag.className = \"u-generated-link\";\n aTag.setAttribute(\"rel\", \"noopener noreferrer\");\n aTag.setAttribute(\"target\", \"_blank\");\n // Escape the url\n return \" \" + aTag.outerHTML;\n }\n );\n};\n\nexport const replaceLineBreaks = (html: string = \"\") => {\n return html.replace(/(?:\\r\\n|\\r|\\n)/g, \"
\");\n};\n\nexport const convertToHTML = (html: string = \"\") => {\n const lineBreaks = replaceLineBreaks(html);\n\n return replaceLinks(lineBreaks);\n};\n","import { BoardStateType } from \"./BoardState\";\nimport {\n CreateListPropsType,\n ListsType,\n ListType,\n ListsOrderType\n} from \"./Board.component\";\nimport { idGen } from \"../utils\";\n\nconst createListReducer = (\n oldState: Pick,\n createListProps: CreateListPropsType\n) => {\n const { lists, listsOrder } = oldState;\n let { type, title, tip } = createListProps;\n type = type ? type : \"standard\";\n const id = idGen();\n const newList: ListType = {\n id,\n title,\n taskIds: [],\n tip,\n isHighLevel: false,\n type\n };\n\n let newState = {\n lists: { ...lists },\n listsOrder: [...listsOrder, newList.id]\n } as CreateListReducerType;\n newState.lists[id] = newList;\n\n return newState;\n};\n\nexport default createListReducer;\n\nexport type CreateListReducerType = {\n lists: ListsType;\n listsOrder: ListsOrderType;\n};\n","import { BoardStateType } from \"./BoardState\";\nimport {\n ListsOrderType\n} from \"./Board.component\";\n\nconst moveListReducer = (\n oldState: Pick,\n moveListProps: MoveListPropsType\n): MoveListReducerType => {\n const { listsOrder } = oldState;\n const { id, placement } = moveListProps;\n\n // Remove id from its current position in listsOrder, then add it at placement index\n let newListsOrder = [...listsOrder];\n newListsOrder = newListsOrder.slice().filter(item => item !== id);\n newListsOrder.splice(placement, 0, id);\n\n let newState = { listsOrder } as MoveListReducerType;\n return newState;\n};\n\nexport default moveListReducer;\n\nexport type MoveListReducerType = {\n listsOrder: ListsOrderType;\n};\n\nexport type MoveListPropsType = {\n id: string;\n placement: number;\n};\n","import { BoardStateType } from \"./BoardState\";\nimport { ListsType, ListsOrderType } from \"./Board.component\";\n\nimport archiveCardReducer from \"./Board.ArchiveCard.reducer\";\n\nconst deleteListReducer = (\n oldState: Pick,\n listID: string\n): DeleteListReducerType => {\n const { lists, listsOrder } = oldState;\n let newState = {\n lists: { ...lists },\n listsOrder: [...listsOrder]\n } as DeleteListReducerType;\n // isHighLevel rows are not allowed to be removed\n // is row allowed to be removed?\n const listToBeRemoved = lists[listID];\n if (!listToBeRemoved.isHighLevel) {\n const { taskIds } = listToBeRemoved;\n\n taskIds.forEach((taskID) => {\n // we archive the tasks for now\n const { lists: updatedLists } = archiveCardReducer(\n { lists: newState.lists },\n taskID\n );\n // remove alll references to archived task\n newState.lists = updatedLists;\n });\n // remove from the order\n const index = newState.listsOrder.indexOf(listID);\n newState.listsOrder.splice(index, 1);\n\n // remove the list\n delete newState.lists[listID];\n }\n\n return newState;\n};\n\nexport type DeleteListReducerType = {\n lists: ListsType;\n listsOrder: ListsOrderType;\n};\n\nexport default deleteListReducer;\n","import { ListType } from \"../Board/Board.component\";\n\nconst updateListReducer = (\n oldState: ListType,\n newList: Partial\n): ListType => {\n return { ...oldState, ...newList };\n};\n\nexport default updateListReducer;\n","import React, { useState, useCallback, useEffect } from \"react\";\nimport { DropResult, ResponderProvided } from \"react-beautiful-dnd\";\nimport { scrollToCard } from \"./BoardCard/BoardCard.component\";\nimport {\n ListsType,\n ListsOrderType,\n TaskType,\n TasksType,\n ListTitleType,\n IndicatorsType,\n IndicatorType,\n TasksWithStyleType,\n TaskWithStyleType,\n ListType,\n CreateListPropsType\n} from \"./Board.component\";\nimport dragEndReducer, { filterResult } from \"./Board.DragEnd.reducer\";\nimport dragListEndReducer from \"../List/List.DragEnd.reducer\";\nimport createCardReducer from \"./Board.CreateCard.reducer\";\nimport { DEFAULT_TASK_SUGGESTIONS } from \"./TaskSuggestions\";\nimport archiveCardReducer from \"./Board.ArchiveCard.reducer\";\nimport updateCardReducer from \"./Board.UpdateCard.reducer\";\nimport updateHighLevelLink from \"./Board.UpdateHighLevelLink.reducer\";\nimport addIndicatorReducer from \"./Board.AddIndicatorToCard.reducer\";\nimport removeIndicatorReducer from \"./Board.RemoveIndicatorToCard.reducer\";\nimport addIndicatorToListReducer from \"../Indicator/Indicator.addIndicatorToList.reducer\";\nimport removeIndicatorFromListReducer from \"../Indicator/Indicator.removeIndicatorFromList.reducer\";\nimport updateIndicatorReducer from \"../Indicator/Indicator.updateIndicator.reducer\";\nimport moveTaskToListReducer from \"./Board.MoveCardToList.reducer\";\nimport filterListsReducer, { FilterType } from \"./Board.FilterLists.reducer\";\nimport { addStyleToTasks, getListDetailsFromTask } from \"./Board.utils\";\nimport { resetApp } from \"../index\";\nimport { AppProps } from \"../App\";\nimport createListReducer from \"./Board.CreateList.reducer\";\nimport moveListReducer, { MoveListPropsType } from \"./Board.MoveList.reducer\";\nimport deleteListReducer from \"./Board.DeleteList.reducer\";\nimport updateListReducer from \"../List/List.updateList.reducer\";\n\nconst BoardContext = React.createContext({\n lists: {},\n unfilteredLists: {},\n listsOrder: [],\n indicators: {},\n tasks: {},\n onDragEnd: () => {},\n onDragListEnd: () => {},\n onCreateCard: () => {},\n onArchiveCard: () => {\n return undefined;\n },\n onUpdateCard: () => {},\n onAddIndicatorToCard: () => {},\n onRemoveIndicatorFromCard: () => {},\n onAddIndicatorToList: () => {},\n onRemoveIndicatorFromList: () => {},\n onUpdateIndicator: () => {},\n onMoveTaskToListReducer: () => {},\n onSetFilter: () => {},\n filter: undefined,\n maxBoardListWidthPx: window.outerWidth,\n taskSuggestions: {},\n onSetEvaluationTitle: () => {},\n onSetEvaluationDescription: () => {},\n evaluationTitle: \"\",\n evaluationDescription: \"\",\n highLevelListID: \"\",\n onImportData: () => {},\n onAddHighLevelLink: () => {},\n onRemoveHighLevelLink: () => {},\n isEmptyBoard: () => false,\n onCreateList: (createListProps: CreateListPropsType) => {},\n onMoveList: (moveListProps: MoveListPropsType) => {},\n onRemoveList: (id: string) => {},\n onUpdateList: () => {},\n isValidTemplateName: (id: string): boolean => {\n return false;\n }\n});\n\nconst templateNames = [\n \"ministry_template\",\n \"reading_recovery\",\n \"demodata\",\n \"covid19_distance_learning\",\n \"period-products-initiative-theory-of-change\"\n] as const;\n\nexport type BoardStateProps = {\n prepopulatedLists: ListsType;\n prepopulatedTasks: TasksType;\n prepopulatedIndicators: IndicatorsType;\n prepopulatedTitle: string;\n prepopulatedDescription: string;\n prepopulatedListsOrder: ListsOrderType;\n};\n\nexport const useBoardState = ({\n prepopulatedLists,\n prepopulatedTasks,\n prepopulatedIndicators,\n prepopulatedTitle,\n prepopulatedDescription,\n prepopulatedListsOrder\n}: BoardStateProps): BoardContextType => {\n const [filter, setFilter] = useState(undefined);\n const [lists, setLists] = useState(\n prepopulatedLists || DEFAULT_BOARD_LISTS\n );\n const [listsOrder, setListsOrder] = useState(\n prepopulatedListsOrder || DEFAULT_BOARD_LISTS_ORDER\n );\n const [indicators, setIndicators] = useState(\n prepopulatedIndicators || DEFAULT_INDICATORS\n );\n const [tasks, setTasks] = useState(prepopulatedTasks || {});\n const [newTaskId, setNewTaskId] = useState();\n const [maxBoardListWidthPx, setMaxBoardListWidthPx] = useState(\n window.outerWidth\n );\n const [taskSuggestions] = useState(DEFAULT_TASK_SUGGESTIONS);\n // const [outcomeGroups] = useState(DEFAULT_OUTCOME_GROUPS);\n const [evaluationTitle, setEvaluationTitle] = useState(\n prepopulatedTitle || DEFAULT_TITLE\n );\n const [evaluationDescription, setEvaluationDescription] = useState(\n prepopulatedDescription || \"\"\n );\n\n //filter\n useEffect(() => {\n if (newTaskId === undefined) return;\n const timer = setTimeout(\n () => {\n setNewTaskId(undefined);\n },\n 1000 // must be enough time for CSS animation to complete\n );\n return () => {\n clearTimeout(timer);\n setNewTaskId(undefined);\n };\n }, [newTaskId]);\n\n useEffect(() => {\n setMaxBoardListWidthPx(window.outerWidth);\n setTimeout(() => {\n const boardlists = document.querySelectorAll(\".boardlist\");\n if (!boardlists) {\n throw Error(\n \"Unable to find boardlists to determine area. This will affect list drop size (shorter lists won't be expanded to max width)\"\n );\n }\n const maxWidth = Math.max(\n ...Array.from(boardlists).map(\n (boardlist) => (boardlist as HTMLElement).scrollWidth\n )\n );\n setMaxBoardListWidthPx(maxWidth);\n }, 250);\n }, [lists]);\n\n const onDragEnd = useCallback(\n (result: DropResult) => {\n const boardStatePickLists: Pick = {\n lists\n };\n\n const newLists = dragEndReducer(\n boardStatePickLists,\n filterResult(result)\n );\n if (newLists) {\n setLists(newLists);\n }\n },\n [lists]\n );\n\n const onDragListEnd = useCallback(\n (result: DropResult) => {\n const state: Pick = {\n listsOrder\n };\n\n const newListsOrder = dragListEndReducer(state, filterResult(result));\n if (newListsOrder) {\n setListsOrder(newListsOrder);\n }\n },\n [listsOrder]\n );\n\n const onCreateCard = useCallback(\n (newCard: TaskType, listID: string) => {\n const boardStatePickListsAndTasks: Pick<\n BoardStateType,\n \"lists\" | \"tasks\"\n > = {\n lists,\n tasks\n };\n const {\n lists: newLists,\n tasks: newTasks,\n newTaskId\n } = createCardReducer(boardStatePickListsAndTasks, newCard, listID);\n setTasks(newTasks);\n setLists(newLists);\n setNewTaskId(newTaskId);\n\n scrollToCard(newTaskId);\n },\n [lists, tasks]\n );\n\n const onArchiveCard = useCallback(\n (taskID: string) => {\n const { lists: newLists, archivedFromList } = archiveCardReducer(\n { lists },\n taskID\n );\n setLists(newLists);\n\n return archivedFromList;\n },\n [lists]\n );\n\n const onUpdateCard = useCallback(\n (taskID: string, updatedProperties: Partial) => {\n const updatedTask = updateCardReducer(tasks[taskID], updatedProperties);\n const updatedTaskList = { ...tasks };\n updatedTaskList[taskID] = updatedTask;\n setTasks(updatedTaskList);\n },\n [tasks]\n );\n\n const onAddIndicatorToCard = useCallback(\n (task: TaskType, indicatorID: string) => {\n const { indicators } = addIndicatorReducer(task, indicatorID);\n const updatedTask = { ...task, indicators };\n const updatedTaskList = { ...tasks };\n updatedTaskList[task.id] = updatedTask;\n setTasks(updatedTaskList);\n },\n [tasks]\n );\n\n const onRemoveIndicatorFromCard = useCallback(\n (task: TaskType, indicatorID: string) => {\n const { indicators } = removeIndicatorReducer(task, indicatorID);\n const updatedTaskList = { ...tasks };\n updatedTaskList[task.id] = { ...task, indicators };\n setTasks(updatedTaskList);\n },\n [tasks]\n );\n\n const onAddIndicatorToList = useCallback(\n (indicator: IndicatorType, taskID) => {\n const updated = addIndicatorToListReducer(indicators, indicator);\n setIndicators(updated);\n onAddIndicatorToCard(tasks[taskID], indicator.id);\n },\n [indicators, onAddIndicatorToCard, tasks]\n );\n\n const onRemoveIndicatorFromList = useCallback(\n (id: string) => {\n //batch process before setting the state!\n const updatedTaskList = Object.values(tasks)\n .map((task) => {\n const { indicators } = removeIndicatorReducer(task, id);\n return { ...task, indicators };\n })\n .reduce((taskList, updatedTask) => {\n taskList[updatedTask.id] = updatedTask;\n return taskList;\n }, {} as TasksType);\n setTasks(updatedTaskList);\n\n const updated = removeIndicatorFromListReducer(indicators, id);\n setIndicators(updated);\n },\n [indicators, tasks]\n );\n\n const onSetEvaluationTitle = useCallback((title: string) => {\n setEvaluationTitle(title);\n }, []);\n const onSetEvaluationDescription = useCallback((desc: string) => {\n setEvaluationDescription(desc);\n }, []);\n\n const onUpdateIndicator = useCallback(\n (id: string, updatedProperties: Partial) => {\n const updated = updateIndicatorReducer(indicators[id], updatedProperties);\n const newState = { ...indicators };\n newState[id] = updated;\n setIndicators(newState);\n },\n [indicators]\n );\n\n const onMoveTaskToListReducer = (taskID: string, targetListID: string) => {\n const newLists = moveTaskToListReducer(lists, tasks[taskID], targetListID);\n setLists(newLists);\n\n scrollToCard(taskID);\n };\n const { highLevelListID = \"\" } = getListDetailsFromTask(\"\", lists);\n\n const taskTypesWithStyle: TasksWithStyleType = addStyleToTasks({\n lists,\n tasks,\n highLevelListID\n });\n\n const onSetFilter = (filter: FilterType | undefined) => setFilter(filter);\n\n const filteredLists = filterListsReducer(lists, tasks, filter);\n\n const onImportData = useCallback(\n (data: LatestImportData, template?: TemplateNameType) => {\n const {\n lists: importedLists,\n listsOrder: importedOrder,\n tasks: importedTasks,\n indicators: importedIndicators,\n evaluationTitle: importedTitle,\n evaluationDescription: importedDecription\n } = data;\n\n const defaultProps: AppProps = {\n template,\n defaultBoardState: {\n prepopulatedLists: importedLists,\n prepopulatedTasks: importedTasks,\n prepopulatedIndicators: importedIndicators,\n prepopulatedTitle: importedTitle,\n prepopulatedDescription: importedDecription,\n prepopulatedListsOrder: importedOrder\n }\n };\n // we reset the whole app when JSON is loaded.\n\n console.log(\"reset app \", defaultProps);\n resetApp(defaultProps);\n },\n [lists]\n );\n\n const onAddHighLevelLink = (taskID: string, highLevelTaskID: string) => {\n const updatedTask = updateHighLevelLink(\n tasks[taskID],\n highLevelTaskID,\n true\n );\n const updatedTaskList = { ...tasks };\n updatedTaskList[taskID] = updatedTask;\n setTasks(updatedTaskList);\n };\n const onRemoveHighLevelLink = (taskID: string, highLevelTaskID: string) => {\n const updatedTask = updateHighLevelLink(\n tasks[taskID],\n highLevelTaskID,\n false\n );\n const updatedTaskList = { ...tasks };\n updatedTaskList[taskID] = updatedTask;\n setTasks(updatedTaskList);\n };\n\n const onCreateList = useCallback(\n (createListProps: CreateListPropsType) => {\n const { lists: newLists, listsOrder: newListsOrder } = createListReducer(\n {\n lists,\n listsOrder\n },\n createListProps\n );\n setListsOrder(newListsOrder);\n setLists(newLists);\n },\n [lists, listsOrder]\n );\n\n const onUpdateList = useCallback(\n (id: string, updatedProperties: Partial) => {\n const oldState = lists[id];\n\n const updated = updateListReducer(oldState, updatedProperties);\n const newState = { ...lists };\n newState[id] = updated;\n setLists(newState);\n },\n [lists]\n );\n\n const onMoveList = useCallback(\n (moveListProps: MoveListPropsType) => {\n const { listsOrder: newListsOrder } = moveListReducer(\n {\n listsOrder\n },\n moveListProps\n );\n setListsOrder(newListsOrder);\n },\n [listsOrder]\n );\n\n const onRemoveList = useCallback(\n (listID: string) => {\n const { lists: newLists, listsOrder: newListOrder } = deleteListReducer(\n { lists, listsOrder },\n listID\n );\n setListsOrder(newListOrder);\n setLists(newLists);\n },\n [lists, listsOrder]\n );\n\n const isValidTemplateName = (id: TemplateNameType) => {\n return templateNames.indexOf(id) !== -1;\n };\n\n const isEmptyBoard = useCallback(() => {\n return Object.keys(tasks).length === 0;\n }, [tasks]);\n\n return {\n filter,\n lists: filteredLists,\n unfilteredLists: lists,\n listsOrder,\n tasks: taskTypesWithStyle,\n indicators,\n onDragEnd,\n onDragListEnd,\n onCreateCard,\n onUpdateCard,\n onArchiveCard,\n onAddIndicatorToCard,\n onRemoveIndicatorFromCard,\n onAddIndicatorToList,\n onRemoveIndicatorFromList,\n onUpdateIndicator,\n onMoveTaskToListReducer,\n newTaskId,\n maxBoardListWidthPx,\n taskSuggestions,\n evaluationTitle,\n onSetEvaluationTitle,\n evaluationDescription,\n onSetEvaluationDescription,\n onSetFilter,\n highLevelListID,\n onImportData,\n onAddHighLevelLink,\n onRemoveHighLevelLink,\n onCreateList,\n onMoveList,\n onRemoveList,\n onUpdateList,\n isValidTemplateName,\n isEmptyBoard\n };\n};\n\nexport type BoardBaseType = {\n lists: ListsType;\n unfilteredLists: ListsType;\n listsOrder: ListsOrderType;\n indicators: IndicatorsType;\n onDragEnd: (result: DropResult, provided: ResponderProvided) => void;\n onDragListEnd: (result: DropResult, provided: ResponderProvided) => void;\n onCreateCard: (newTask: TaskType, listID: string) => void;\n onArchiveCard: (taskID: string) => string | undefined;\n onUpdateCard: (\n taskID: string,\n updatedProperties: Partial\n ) => void;\n onAddIndicatorToCard: (task: TaskType, indicatorID: string) => void;\n onAddIndicatorToList: (indicator: IndicatorType, taskID: string) => void;\n onRemoveIndicatorFromList: (id: string) => void;\n onMoveTaskToListReducer: (tasskID: string, targetListID: string) => void;\n onUpdateIndicator: (\n id: string,\n updatedProperties: Partial\n ) => void;\n onRemoveIndicatorFromCard: (task: TaskType, indicatorID: string) => void;\n newTaskId?: string;\n maxBoardListWidthPx: number;\n taskSuggestions: TaskSuggestions;\n onSetEvaluationTitle: (title: string) => void;\n onSetEvaluationDescription: (description: string) => void;\n evaluationTitle: string;\n evaluationDescription: string;\n onSetFilter: (filter: FilterType | undefined) => void;\n filter: FilterType | undefined;\n onAddHighLevelLink: (taskID: string, highLevelTaskID: string) => void;\n onRemoveHighLevelLink: (taskID: string, highLevelTaskID: string) => void;\n onCreateList: (createListProps: CreateListPropsType) => void;\n onMoveList: (moveListProps: MoveListPropsType) => void;\n onUpdateList: (id: string, updatedProperties: Partial) => void;\n onRemoveList: (id: string) => void;\n isValidTemplateName: (id: TemplateNameType) => boolean;\n isEmptyBoard: () => boolean;\n};\n\nexport type TemplateNameType = typeof templateNames[number];\n\nexport type BoardStateType = BoardBaseType & {\n tasks: TasksWithStyleType;\n};\n\n//file format version 1:\nexport type FileContentType = {\n readme: string;\n version: string;\n data?: ImportDataV1;\n};\n\nexport type ImportDataV1 = ImportDataV0 & Pick;\nexport type ImportDataV2 = ImportDataV0 & Pick;\nexport type ImportDataV3 = ImportDataV2;\n\nexport const VERSION_0_0 = \"0.0\";\nexport const VERSION_0_1 = \"0.1\";\nexport const VERSION_0_2 = \"0.2\";\nexport const VERSION_0_3 = \"0.3\";\n\n//version 0 for reference and unit testing:\nexport type ImportDataV0 = Pick<\n BoardStateType,\n \"lists\" | \"listsOrder\" | \"tasks\" | \"evaluationTitle\" | \"evaluationDescription\"\n>;\n\nexport type FileContentTypeV0 = Pick & {\n data?: ImportDataV0;\n};\n\nexport type ImportData = ImportDataV0 | ImportDataV1;\nexport type LatestImportData = ImportDataV1;\n\nexport type BoardContextType = BoardBaseType & {\n tasks: TasksWithStyleType;\n highLevelListID: string;\n onImportData: (data: LatestImportData, template: TemplateNameType) => void;\n};\n\nexport const DEFAULT_BOARD_LISTS: ListsType = {\n \"list-0\": {\n id: \"list-0\",\n title: \"Assumptions\" as ListTitleType,\n taskIds: [],\n tip: \"What is an assumption?\\nAssumptions are the conditions that are necessary for success, and you believe are true. Your programme needs these conditions in order to succeed, but you believe these conditions already exist – they are not something you bring about with your programme activities.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: Assumption: Principal vacancy exists, and schools meet the eligibility criteria in order to avail of the allowance.\\n\\nEvaluative thinking prompts: What conditions are required for your initiative to succeed? Who needs to be willing to engage? Challenge your assumptions: if the condition doesn’t exist as expected, do you need to address this in the design/implementation of your initiative?\",\n type: \"standard\"\n },\n \"list-1\": {\n id: \"list-1\",\n title: \"Inputs\",\n taskIds: [],\n tip: \"What is an input?\\nInputs refer to the resources that are invested in the programme, policy or initiative. The resources include the human, financial, organisational, and community resources available for carrying out a programme's activities.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: $50k annual allowance to school. 1 FTE (full time equivalent) of staff support\\n\\nEvaluative thinking prompts: This row can also include activities. Activities are the processes, tools, events, and actions that are used to bring about a program's intended changes or results. An example of an activity could be: Create operational guidelines for advertising, selection, appraisal and approval.\",\n type: \"standard\"\n },\n \"list-2\": {\n id: \"list-2\",\n title: \"Outputs\" as ListTitleType,\n taskIds: [],\n tip: \"What is an output?\\nOutputs refer to what you are doing with the resources invested. Outputs are the direct products of a programme's activities and may include types, levels and targets of services to be delivered by the programme.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: Right school get the right principal at the right time.\\n\\nEvaluative thinking prompts: Sometimes the line between output and short term outcome can be blurred. It is okay to move cards between the two until you have a group consensus on whether something is an intended result/impact of your initiative (outcome) or a product/service that the initiative will deliver (output).\",\n type: \"standard\"\n },\n \"list-3\": {\n id: \"list-3\",\n title: \"Short Term Outcome\" as ListTitleType,\n taskIds: [],\n tip: \"What is a short term outcome?\\nRefer to changes in awareness, knowledge, attitudes, skills, opinions, aspirations and motivations. They are measured at the end of the programme, project or any initiative. It can be directly tied to the intervention.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: Quality leadership is initiated with community contribution\\n\\nEvaluative thinking prompts: Don’t forget to add Indicators to your short term outcomes. Indicators are measurable information used to determine if a programme is being implemented as expected and achieving their outcomes. The choice of indicators will often inform the rest of the evaluation plan, including evaluation methods, data analysis, and reporting\",\n type: \"outcome\"\n },\n \"list-4\": {\n id: \"list-4\",\n title: \"Medium Term Outcome\" as ListTitleType,\n taskIds: [],\n tip: \"What is a medium term outcome?\\nRefer to changes in behaviour, practice, decision-making, policies and social action. Depending on the complexity of the programme, medium term outcomes are usually measured within 2-3 years of implementation.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: Quality leadership has positive impact on teaching practice.\\n\\nEvaluative thinking prompts: Think about the different groups of people that will be affected and what that will look like for each group (e.g. learners, whānau, teachers, Kāhui Ako, hapū, iwi, communities).\",\n type: \"outcome\"\n },\n \"list-5\": {\n id: \"list-5\",\n title: \"Long Term Outcome\" as ListTitleType,\n taskIds: [],\n isHighLevel: true,\n tip: \"What is a long term outcome?\\nRefer to changes in social, economic, civic and environmental conditions. They are measured several years after programme completion. They are hard to directly connect to the intervention. These levels of outcomes are related and build on each other.\\n\\nExample [from Demo #1 – ‘Principal Recruitment…’]: Distributed leadership is expected\\n\\nEvaluative thinking prompts: What are the broader conditions that you expect your initiative to influence in some way? Your initiative will not control this long-term outcome completely; there will many influences.\",\n type: \"standard\"\n }\n};\n\nexport const DEFAULT_BOARD_LISTS_ORDER: ListsOrderType = [\n \"list-5\",\n \"list-4\",\n \"list-3\",\n \"list-2\",\n \"list-1\",\n \"list-0\"\n];\n\nexport const DEFAULT_TITLE = \"My Logic Model Title\";\n\nexport const DEFAULT_BOARD_TASKS: TasksType = {\n \"task-1\": {\n id: \"task-1\",\n label: \"Increased equity of achievement and outcomes\",\n description: \"description goes here\",\n indicators: [\"indicator-1\", \"indicator-2\", \"indicator-6\", \"indicator-7\"]\n },\n \"task-2\": {\n id: \"task-2\",\n label:\n \"Enhanced school resilience and capability within the schools and across the system\",\n description: \"description goes here\"\n },\n \"task-3\": {\n id: \"task-3\",\n label: \"Collaborative practice embedded through the pathway\",\n description: \"description goes here\",\n highLevelTaskIDs: [\"task-1\"],\n indicators: [\"indicator-3\"]\n },\n \"task-4\": {\n id: \"task-4\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-5\": {\n id: \"task-5\",\n label: \"Distributed leadership is embedded\",\n highLevelTaskIDs: [\"task-1\"],\n description: \"description goes here\"\n },\n \"task-6\": {\n id: \"task-6\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-7\": {\n id: \"task-7\",\n label: \"Distributed leadership is embedded\",\n highLevelTaskIDs: [\"task-2\"],\n description: \"description goes here\"\n },\n \"task-8\": {\n id: \"task-8\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-9\": {\n id: \"task-9\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-10\": {\n id: \"task-10\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-11\": {\n id: \"task-11\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-12\": {\n id: \"task-12\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-13\": {\n id: \"task-13\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-14\": {\n id: \"task-14\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n },\n \"task-15\": {\n id: \"task-15\",\n label: \"Distributed leadership is embedded\",\n description: \"description goes here\"\n }\n};\n\nexport const DEFAULT_INDICATORS: IndicatorsType = {\n \"indicator-1\": {\n id: \"indicator-1\",\n title: \"Indicator 1\",\n label: \"Label 1\",\n description: \"description 1\"\n },\n \"indicator-2\": {\n id: \"indicator-2\",\n title: \"Indicator 2\",\n label: \"Label 2\",\n description: \"description 2\",\n\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-3\": {\n id: \"indicator-3\",\n title: \"Indicator 3\",\n label: \"Label 3\",\n description: \"description 3\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-4\": {\n id: \"indicator-4\",\n title: \"Indicator 4\",\n label: \"Label 4\",\n description: \"description 4\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-5\": {\n id: \"indicator-5\",\n title: \"Indicator 5\",\n label: \"Label 5\",\n description: \"description 5\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-6\": {\n id: \"indicator-6\",\n title: \"Indicator 6\",\n label: \"Label 6\",\n description: \"description 6\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-7\": {\n id: \"indicator-7\",\n title: \"Indicator 7\",\n label: \"Label 7\",\n description: \"description 7\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n },\n \"indicator-8\": {\n id: \"indicator-8\",\n title: \"Indicator 8\",\n label: \"Label 8\",\n description: \"description 8\",\n how: \"by car\",\n howOften: \"fortnightly\",\n who: \"Delta\"\n }\n};\n\nexport const DEFAULT_OUTCOME_GROUPS = {\n \"outcome-group-0\": {\n id: \"outcome-group-0\",\n colour: \"No Group\"\n },\n \"outcome-group-1\": {\n id: \"outcome-group-1\",\n colour: undefined\n },\n \"outcome-group-2\": {\n id: \"outcome-group-2\",\n colour: undefined\n },\n \"outcome-group-3\": {\n id: \"outcome-group-3\",\n colour: undefined\n },\n \"outcome-group-4\": {\n id: \"outcome-group-4\",\n colour: undefined\n },\n \"outcome-group-5\": {\n id: \"outcome-group-5\",\n colour: undefined\n }\n};\n\nexport type TaskSuggestions = { [fieldId: string]: TaskSuggestion[] };\n\nexport type TaskSuggestion = {\n value: string | number;\n label: string;\n colour?: string;\n};\n\nexport default BoardContext;\n","import React from \"react\";\nimport AppContext from \"../AppState\";\nimport \"./ToolBarButton.scss\";\n\nconst ToolBarButtonFilter = () => {\n return (\n \n {value => {\n const openModal = () => {\n if (!value.modals.setModalOpen) return;\n value.modals.setModalOpen({\n type: \"EditFilters\"\n });\n };\n return (\n \n Filters\n \n );\n }}\n \n );\n};\n\nexport default ToolBarButtonFilter;\n","import React from \"react\";\nimport AppContext from \"../AppState\";\nimport \"./ToolBarButton.scss\";\n\ntype Props = {\n title: string;\n};\n\nconst ToolBarButtonEdit = ({ title }: Props) => {\n return (\n \n {value => {\n const openModal = () => {\n if (!value.modals.setModalOpen) return;\n value.modals.setModalOpen({\n type: \"EditBoardTitle\"\n });\n };\n return (\n \n {title}\n \n );\n }}\n \n );\n};\n\nexport default ToolBarButtonEdit;\n","import React from \"react\";\nimport AppContext from \"../AppState\";\nimport \"./ToolBarButton.scss\";\n\nconst ToolBarButtonHelp = () => {\n return (\n \n {(value) => {\n const openModal = () => {\n if (!value.modals.setModalOpen) return;\n value.modals.setModalOpen({\n type: \"Help\"\n });\n };\n return (\n \n Help\n \n );\n }}\n \n );\n};\n\nexport default ToolBarButtonHelp;\n","import React from \"react\";\nimport classnames from \"classnames\";\nimport \"./ToolBarButton.scss\";\nimport { Link } from \"react-router-dom\";\n\ntype Props = {\n to: string;\n label: string;\n isWarning?: Boolean;\n};\n\nconst ToolBarButtonRoute = ({ to, label, isWarning }: Props) => {\n const classes = classnames(\"toolbar__button\", {\n \"toolbar__button--warning\": isWarning\n });\n return (\n \n {label}\n \n );\n};\n\nexport default ToolBarButtonRoute;\n","import React, { useContext } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\n\nimport ButtonSave from \"./ToolBarButtonSave.component\";\nimport ButtonImport from \"./ToolBarButtonImport.component\";\nimport ButtonFilter from \"./ToolBarButtonFilter.component\";\nimport ButtonEdit from \"./ToolBarButtonEdit.component\";\nimport ButtonPrint from \"./ToolBarButtonPrint.component\";\nimport MoeIcon from \"./moe-icon.png\";\nimport \"./ToolBar.scss\";\nimport BoardContext, {\n BoardStateType,\n TemplateNameType\n} from \"../Board/BoardState\";\nimport { loadJSON, handleFileRead, tooltipStyle } from \"../Board/Board.utils\";\nimport UpdateListsButton from \"./ToolBarButtonUpdateLists.component\";\nimport ToolBarButtonHelp from \"./ToolBarButtonHelp.component\";\nimport { Link } from \"react-router-dom\";\nimport ToolBarButtonRoute from \"./ToolBarButtonRoute.component\";\nimport {\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n MenuLink\n} from \"@reach/menu-button\";\nimport { useAppContext } from \"../AppState\";\nimport Tooltip from \"@reach/tooltip\";\n\ntype Props = Pick<\n BoardStateType,\n | \"evaluationTitle\"\n | \"onSetEvaluationTitle\"\n | \"evaluationDescription\"\n | \"onSetEvaluationDescription\"\n | \"filter\"\n | \"onSetFilter\"\n | \"lists\"\n>;\n\nconst ToolBar = ({\n evaluationTitle,\n evaluationDescription,\n filter,\n onSetFilter,\n lists\n}: Props) => {\n const hasFilterApplied = filter ? true : false;\n const title = evaluationTitle ? evaluationTitle : No title;\n const isSummaryView = useLocation().pathname.indexOf(\"summary\") > -1;\n const { onImportData, isValidTemplateName, isEmptyBoard } =\n useContext(BoardContext);\n const { modals } = useAppContext();\n const openTemplate = (id: TemplateNameType) => {\n //if empty, just load\n const valid = isValidTemplateName(id);\n if (valid) {\n if (isEmptyBoard()) {\n loadJSON(` ${id}.json`, (resultContent: string) => {\n handleFileRead({ result: resultContent, onImportData });\n });\n } else {\n //if there is data in the board, open a new window\n const url = \"/\";\n window.open(`${url}?template=${id}`, \"_blank\");\n }\n }\n };\n\n const newTemplates: { label: string; file: TemplateNameType }[] = [\n { label: \"Ministry template\", file: \"ministry_template\" }\n ];\n const demoTemplates: { label: string; file: TemplateNameType }[] = [\n {\n label: \"Principal Recruitment Allowance Theory of Change\",\n file: \"demodata\"\n },\n // {\n // label: \"Period Products Initiative Theory of Change\",\n // file: \"period-products-initiative-theory-of-change\"\n // },\n { label: \"Covid19 Distance Learning\", file: \"covid19_distance_learning\" },\n { label: \"Reading Recovery\", file: \"reading_recovery\" }\n ];\n\n const homeURL = [\n window.location.protocol,\n \"//\",\n window.location.host,\n window.location.pathname\n ].join(\"\");\n return (\n
\n \n {title}\n \n \n \n \n \n \n\n \n\n
\n \n {!isSummaryView && (\n <>\n \n {/* */}\n \n File\n \n {/* */}\n \n {!isSummaryView && (\n {\n if (!modals.setModalOpen) return;\n modals.setModalOpen({\n type: \"Upload\"\n });\n }}\n className=\"toolbar__button toolbar__button--dropdown\"\n title=\"Do you want to edit your previous work? Use this option to upload your .json file.\"\n >\n Import JSON\n \n )}\n {\n if (!modals.setModalOpen) return;\n modals.setModalOpen({\n type: \"Download\"\n });\n }}\n className=\"toolbar__button toolbar__button--dropdown\"\n title=\"Use this option to save a copy of your work. Please note, you will have to upload the file to this website to edit your work (the .json file cannot be opened otherwise).\"\n >\n Download JSON\n \n\n {\n window.print();\n }}\n className=\"toolbar__button toolbar__button--dropdown\"\n title=\"Use this option to print or save as pdf. We recommend that you also download the .json file in case you want to make further edits.\"\n >\n Print\n \n \n \n \n \n New\n \n\n \n \n Blank\n \n\n {newTemplates.map((template) => {\n return (\n openTemplate(template.file)}\n className=\"toolbar__button toolbar__button--dropdown\"\n >\n {template.label}\n \n );\n })}\n \n \n \n \n Demo\n \n \n {demoTemplates.map((template) => {\n return (\n openTemplate(template.file)}\n className=\"toolbar__button toolbar__button--dropdown\"\n >\n {template.label}\n \n );\n })}\n \n \n \n )}\n {!isSummaryView && (\n {\n if (!modals.setModalOpen) return;\n modals.setModalOpen({\n type: \"UpdateLists\"\n });\n }}\n className=\"toolbar__button toolbar__button--dropdown\"\n >\n Update model\n \n )}\n {isSummaryView && (\n {\n window.print();\n }}\n className=\"toolbar__button toolbar__button--dropdown\"\n title=\"Use this option to print or save as pdf. We recommend that you also download the .json file in case you want to make further edits.\"\n >\n Print\n \n )}\n {hasFilterApplied ? (\n onSetFilter(undefined)}\n data-test-button-clear-filters\n >\n Clear filters\n \n ) : (\n \n )}\n\n \n
\n
\n );\n};\n\nexport default ToolBar;\n","import React from \"react\";\nimport { Droppable } from \"react-beautiful-dnd\";\nimport Tooltip from \"@reach/tooltip\";\nimport { ListType } from \"../Board.component\";\nimport BoardCard from \"../BoardCard/BoardCard.component\";\nimport AppContext from \"../../AppState\";\nimport classNames from \"classnames\";\nimport \"./BoardList.scss\";\nimport { BoardContextType } from \"../BoardState\";\nimport { idGen } from \"../../utils\";\nimport { tooltipStyle } from \"../Board.utils\";\n\ntype Props = Pick<\n BoardContextType,\n \"indicators\" | \"newTaskId\" | \"maxBoardListWidthPx\" | \"tasks\" | \"onCreateCard\"\n> & {\n listID: string;\n list: ListType;\n isViewOnly?: boolean;\n isListDragging?: boolean;\n};\n\nconst BoardList = ({\n listID,\n list,\n tasks,\n newTaskId,\n maxBoardListWidthPx,\n indicators,\n onCreateCard,\n isViewOnly,\n isListDragging\n}: Props) => {\n return (\n \n {(value) => {\n const onOpenModal = () => {\n if (!value.modals.setModalOpen) return;\n\n const newID = idGen();\n onCreateCard(\n {\n id: newID,\n label: \"\",\n description: \"\"\n },\n listID\n );\n\n value.modals.setModalOpen({\n type: \"CreateCard\",\n targetId: newID,\n targetListID: listID\n });\n };\n\n const onListNameClick = () => {\n value.modals.setModalOpen({\n type: \"UpdateLists\",\n updateListID: listID\n });\n };\n return (\n \n {(provided, snapshot) => {\n const { isDraggingOver } = snapshot;\n return (\n \n
\n {!list.isHighLevel && (\n
\n )}\n {/* */}\n \n {list.title}\n \n {/* */}\n \n \n +\n \n \n
\n\n {Object.keys(tasks).map((key, index) => (\n \n ))}\n {provided.placeholder}\n \n );\n }}\n
\n );\n }}\n
\n );\n};\n\nexport default BoardList;\n","import React, { useEffect, useContext, useState } from \"react\";\nimport {\n DragDropContext,\n DroppableProvided,\n Droppable,\n Draggable,\n DropResult,\n ResponderProvided\n} from \"react-beautiful-dnd\";\nimport BoardList from \"./BoardList/BoardList.component\";\nimport BoardContext, {\n BoardContextType,\n TemplateNameType,\n LatestImportData\n} from \"./BoardState\";\nimport \"./Board.scss\";\nimport { loadJSON, handleFileRead } from \"./Board.utils\";\n\ntype Props = { template?: TemplateNameType | undefined };\n\nconst Board = ({ template: templateID }: Props) => {\n const [template, setTemplate] = useState();\n const { onImportData, isValidTemplateName } = useContext(BoardContext);\n\n useEffect(() => {\n // if there is a URL param, load the correct JSON and reload the app\n if (!templateID && template) {\n const isvalid = isValidTemplateName(template);\n if (isvalid) {\n loadJSON(`${template}.json`, (resultContent: string) => {\n handleFileRead({\n result: resultContent,\n onImportData: (data: LatestImportData) => {\n //set the data and templateID\n onImportData(data, template);\n }\n });\n });\n }\n } else {\n const urlParams = new URLSearchParams(window.location.search);\n const templateParam = urlParams.get(\"template\");\n if (templateParam) {\n setTemplate(templateParam as TemplateNameType);\n }\n }\n }, [template, isValidTemplateName, onImportData, templateID]);\n\n return (\n \n {({\n listsOrder,\n lists,\n indicators,\n tasks,\n onDragEnd,\n onDragListEnd,\n newTaskId,\n maxBoardListWidthPx,\n onCreateCard,\n filter\n }: BoardContextType) => {\n const hasFilters = filter ? true : false;\n\n const onDragEnds = (\n result: DropResult,\n provided: ResponderProvided\n ) => {\n if (result.type === \"list\") {\n onDragListEnd(result, provided);\n } else {\n onDragEnd(result, provided);\n }\n };\n\n return (\n \n
\n \n {(provided: DroppableProvided) => (\n
\n {listsOrder.map((listId, index) => {\n const list = lists[listId];\n const thisTasks: TasksWithStyleType = {};\n if (list) {\n list.taskIds.forEach((taskId) => {\n thisTasks[taskId] = { ...tasks[taskId] };\n });\n }\n return (\n \n {(provided, snapshot) => (\n \n {list ? (\n \n ) : (\n applying filter\n )}\n
\n )}\n \n );\n })}\n {provided.placeholder}\n
\n )}\n \n \n
\n );\n }}\n
\n );\n};\n\nexport default Board;\n\nexport type ListTitleType = string;\n\nexport type ListType = {\n id: string;\n title: ListTitleType;\n taskIds: string[];\n tip: string;\n isHighLevel?: boolean;\n type: ListCategoryType;\n};\n\nexport type ListsType = {\n [key: string]: ListType;\n};\n\nexport type ListCategoryType = \"standard\" | \"outcome\";\nexport const LIST_CATEGORIES: ListCategoryType[] = [\"standard\", \"outcome\"];\n\nexport type CreateListPropsType = {\n type: ListCategoryType;\n title: string;\n tip: string;\n};\n\n// \"Active\" is considered to be either\n// 1) a Task in a list of 'Long Term Outcomes'; OR\n// 2) a Task has a child highLevelTaskID that refers to it, even if the Task is not in the 'Long Term Outcome' list\n// Tasks that don't match this criteria should be removed from this list\nexport type ActiveHighLevelOutcomeTaskIds = string[];\n\nexport type IndicatorsType = {\n [key: string]: IndicatorType;\n};\n\nexport type IndicatorType = {\n id: string;\n title: string;\n label: string;\n description: string;\n who?: string;\n how?: string;\n howOften?: string;\n onClick?: (e: React.MouseEvent, id: string) => void | undefined;\n};\n\nexport type IndicatorMetadataType = {\n name: string;\n value: string;\n};\n\nexport type TaskType = {\n id: string;\n label: string;\n description: string;\n indicators?: string[];\n highLevelTaskIDs?: string[];\n};\n\nexport type TaskWithStyleType = TaskType & { cardColour?: string[] };\n\nexport type TasksType = {\n [key: string]: TaskWithStyleType;\n};\n\nexport type TasksWithStyleType = {\n [key: string]: TaskWithStyleType;\n};\n\nexport type ListsOrderType = string[];\n","import React from \"react\";\nimport {\n IndicatorsType,\n TasksType,\n ListsType,\n ListTitleType\n} from \"./Board.component\";\nimport \"./Printable.scss\";\n\ntype Props = {\n indicators: IndicatorsType;\n tasks: TasksType;\n lists: ListsType;\n};\n\nexport const Printable = ({ indicators, tasks, lists }: Props) => {\n const usedIndicators = [] as string[];\n const listOrder: ListTitleType[] = [\n \"Long Term Outcome\",\n \"Medium Term Outcome\",\n \"Short Term Outcome\",\n \"Output\",\n \"Input\",\n \"Assumptions\"\n ];\n const sortedLists = Object.values(lists);\n\n sortedLists.sort((a, b) => {\n return listOrder.indexOf(a.title) - listOrder.indexOf(b.title);\n });\n\n const hasIndicatorsInList = (taskIds: string[]) => {\n const withIndicators = [];\n taskIds.forEach(id => {\n const task = tasks[id];\n const indicatorListTask = task.indicators || [];\n indicatorListTask.forEach((id: string) => withIndicators.push(id));\n });\n return withIndicators.length > 0;\n };\n\n const print = sortedLists.map(({ title, taskIds, id }) => {\n const hasTasksWithIndicators = hasIndicatorsInList(taskIds);\n if (!hasTasksWithIndicators) return null;\n const titleAbreviation = title\n .split(\" \")\n .reduce((accum, word) => {\n return (accum += word.charAt(0));\n }, \" \")\n .toUpperCase();\n return (\n
\n

\n {title} - {titleAbreviation}\n

\n\n {taskIds.map(id => {\n const task = tasks[id];\n const indicatorListTask = task.indicators || [];\n indicatorListTask.forEach((id: string) => usedIndicators.push(id));\n\n const taskLayout = (\n
\n

{task.label}

\n
Indicators:
\n {indicatorListTask.map(key => {\n const {\n title = \"\",\n label = \"\",\n description = \"\",\n how = \"\",\n howOften = \"\",\n who = \"\"\n } = indicators[key] || {};\n return (\n
\n

{`${label} - ${titleAbreviation}`}

\n
{`Title:`}
\n
{`${title}`}
\n
{`Description:`}
\n
{` ${description}`}
\n {how && (\n
\n
{`How to collect: `}
\n
{`${how}`}
\n
\n )}\n {howOften && (\n
\n
{`How often to collect: `}
\n
{`${howOften}`}
\n
\n )}\n {who && (\n
\n
{`Who is collecting: `}
\n
{`${who}`}
\n
\n )}\n
\n );\n })}\n
\n );\n\n return indicatorListTask.length > 0 ? (\n taskLayout\n ) : (\n
\n

{task.label}

\n no indicators\n
\n );\n })}\n
\n );\n });\n\n return (\n
\n

Indicators:

\n {print}\n
\n );\n};\n","import React, { useContext } from \"react\";\nimport BoardContext, { TemplateNameType } from \"../Board/BoardState\";\nimport Board from \"../Board/Board.component\";\n\nimport { Printable } from \"../Board/Printable\";\n\nexport type HomeProps = {\n template?: TemplateNameType | undefined;\n};\n\nconst Home = ({ template }: HomeProps) => {\n const { indicators, tasks, lists } = useContext(BoardContext);\n\n return (\n
\n \n \n
\n );\n};\n\nexport default Home;\n","import React from \"react\";\nimport { ListType, TaskWithStyleType } from \"../Board/Board.component\";\nimport { createLinkageStyle } from \"../Board/Board.utils\";\n\nexport type SummaryListProps = {\n list: ListType;\n tasks: TaskWithStyleType[];\n};\n\nconst SummaryList = ({ list, tasks }: SummaryListProps) => {\n return (\n
\n
\n
{list.title}
\n
\n {tasks.map((task) => {\n const borderStyle = createLinkageStyle(task, list);\n\n return (\n \n );\n })}\n
\n
\n
\n );\n};\n\nexport default SummaryList;\n","import React from \"react\";\nimport { ListType, TaskWithStyleType } from \"../Board/Board.component\";\nimport { createLinkageStyle } from \"../Board/Board.utils\";\n\nexport type SummaryHorizontalListProps = {\n list: ListType;\n tasks: TaskWithStyleType[];\n};\n\nconst SummaryHorizontalList = ({ list, tasks }: SummaryHorizontalListProps) => {\n return (\n
\n
\n
\n
{list.title}
\n
\n {tasks.map((task) => {\n const borderStyle = createLinkageStyle(task, list);\n return (\n
\n
\n \n {task.label}\n
\n
\n
\n );\n })}\n
\n
\n
\n \n );\n};\n\nexport default SummaryHorizontalList;\n","import React, { useContext } from \"react\";\nimport BoardContext from \"../Board/BoardState\";\n\nimport \"./RouteView.scss\";\nimport \"../Board/Printable.scss\";\nimport SummaryList from \"../Summary/SummaryList\";\nimport SummaryHorizontalList from \"../Summary/SummaryHorizontalList\";\nimport \"../Summary/Summary.scss\";\nimport { convertToHTML } from \"../utils\";\n\nconst Summary = () => {\n const {\n tasks,\n lists,\n listsOrder,\n evaluationDescription,\n evaluationTitle\n } = useContext(BoardContext);\n const reversedList = [...listsOrder].reverse();\n const assumptionListID = reversedList[0];\n const assumptionList = lists[assumptionListID];\n reversedList.shift();\n const assumptionsTasks = assumptionList.taskIds.map((id) => tasks[id]);\n const highLevelLists = Object.values(lists).filter((list) => {\n return list.isHighLevel;\n });\n const highLevelTaskOrder: string[] = [];\n highLevelLists.forEach((list) => {\n highLevelTaskOrder.push(...list.taskIds);\n });\n\n const dangerousHTML = convertToHTML(evaluationDescription);\n return (\n
\n

{evaluationTitle}

\n
\n {reversedList.map((id) => {\n const list = lists[id];\n const summaryTasks = list.taskIds.map((id) => tasks[id]);\n //if a list is NOT a highleve list, we need to order the cards by high order ID\n if (!list.isHighLevel) {\n // sort the summaryTasks by id in the same order as the highLevelTasskOrder variable\n summaryTasks.sort((a, b) => {\n // we sort on the first colour, as that will be the most important one\n\n if (\n a.highLevelTaskIDs &&\n b.highLevelTaskIDs &&\n a.highLevelTaskIDs.length > 0 &&\n b.highLevelTaskIDs.length > 0\n ) {\n const val =\n highLevelTaskOrder.indexOf(a.highLevelTaskIDs[0]) -\n highLevelTaskOrder.indexOf(b.highLevelTaskIDs[0]);\n\n return val;\n }\n if (a.highLevelTaskIDs && a.highLevelTaskIDs.length > 0) {\n return -1;\n }\n if (b.highLevelTaskIDs && b.highLevelTaskIDs.length > 0) {\n return 1;\n }\n\n return 0;\n });\n }\n return ;\n })}\n
\n\n
\n
\n \n
\n
\n
Description
\n
\n \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default Summary;\n","import React, { ButtonHTMLAttributes, MouseEvent } from \"react\";\nimport classnames from \"classnames\";\nimport \"./FieldButton.scss\";\n\ntype Props = {\n children: React.ReactNode;\n type?: Pick, \"type\">;\n onClick?: (event: React.MouseEvent) => void;\n level?: \"warning\" | \"confirm\";\n icon?: \"delete\" | \"add\" | \"download\";\n disabled?: boolean;\n};\n\nconst Button = ({\n children,\n onClick,\n level,\n icon,\n disabled = false\n}: Props) => {\n return (\n \n {children}\n \n );\n};\n\nexport default Button;\n","import React, { useState, useCallback, ReactChild, Fragment } from \"react\";\nimport { convertToHTML } from \"../utils\";\nimport \"./Field.scss\";\nimport classNames from \"classnames\";\n\ntype FieldBaseProps = {\n id: string;\n label: React.ReactNode;\n children: ReactChild;\n readModeClassName?: string | undefined;\n placeholder?: string | null;\n isTextArea?: boolean | undefined;\n};\n\ntype FieldToggleEditProps = FieldBaseProps & {\n useCustomViewMode: boolean | true;\n readOnly: false;\n forceEditMode?: boolean | undefined;\n value: string | undefined;\n};\n\ntype FieldReadOnlyProps = FieldBaseProps & {\n readOnly: true;\n};\n\nconst Field = (props: FieldToggleEditProps | FieldReadOnlyProps) => {\n const {\n isTextArea,\n id,\n label,\n children,\n readOnly,\n readModeClassName,\n placeholder\n } = props;\n const value = props.readOnly ? \"\" : props.value;\n let useCustomViewMode = true;\n let forcedEditMode = false;\n\n if (!props.readOnly) {\n useCustomViewMode = props.useCustomViewMode;\n forcedEditMode = !!props.forceEditMode;\n }\n const [isEditing, setIsEditing] = useState(forcedEditMode);\n const [selectionPosition, setSelectionPosition] = useState(0);\n\n const showCustomViewMode = !isEditing && useCustomViewMode;\n return (\n
\n \n {showCustomViewMode ? (\n \n ) : (\n \n )}\n
\n );\n};\n\ntype ReadModeProps = {\n value: string | undefined;\n placeholder?: string | null;\n className: string | undefined;\n setIsEditing: Function;\n setSelectionPosition: Function;\n readOnly?: boolean;\n isTextArea: boolean | undefined;\n};\n\nfunction ReadMode({\n readOnly,\n value,\n setIsEditing,\n placeholder,\n className,\n isTextArea,\n setSelectionPosition\n}: ReadModeProps) {\n const dangerousHTML = convertToHTML(value);\n const getTextLengthBetweenElements = (\n element: Node,\n lastElement: Node | null,\n countOffset: number\n ) => {\n let counter = countOffset || 0;\n let whiteSpaceFound;\n if (!lastElement) return counter;\n\n const children = element.childNodes;\n for (let index = 0; index < children.length; index++) {\n const node = children[index];\n if (lastElement === node) {\n if (whiteSpaceFound) counter -= 1;\n return counter;\n }\n const isTextNode = node.nodeName === \"#text\";\n if (isTextNode) {\n if (node.nodeValue) {\n //remove whitespaces at the end and start\n counter += node.nodeValue.trim().length || 0;\n }\n } else {\n //breaks are /n so add 1\n if (node.nodeName === \"BR\") {\n whiteSpaceFound = true;\n counter += 1;\n } else {\n counter += getTextLengthBetweenElements(node, lastElement, 0);\n }\n }\n }\n return counter;\n };\n\n const onClick = useCallback(\n (e: any) => {\n const selection = window.getSelection();\n\n if (selection) {\n const mainElement = e.target;\n\n const anchorNode = selection.anchorNode;\n\n const position = selection.focusOffset;\n let charsFromStart = getTextLengthBetweenElements(\n mainElement,\n anchorNode,\n position\n );\n\n setSelectionPosition(charsFromStart);\n }\n\n if (readOnly) return;\n const clickedElement = e.target;\n const isLink = clickedElement.classList.contains(\"u-generated-link\");\n // not clicked on a link, go in edit mode\n if (!isLink) {\n setIsEditing(true);\n }\n },\n [readOnly, setIsEditing]\n );\n const onFocus = useCallback(\n (e: any) => {\n if (readOnly) return;\n setSelectionPosition(0);\n setIsEditing(true);\n },\n [readOnly, setIsEditing]\n );\n\n return (\n \n \n \n {value ? (\n \n ) : isTextArea ? (\n \n ) : (\n \n )}\n \n \n \n );\n}\n\ntype EditModeProps = {\n children: ReactChild;\n setIsEditing: Function;\n selectionPosition: number;\n};\n\nexport const FieldContext = React.createContext({\n selectionPosition: 0,\n onBlur: () => {}\n});\nexport type FieldContextType = {\n onBlur: (event: React.FocusEvent) => void;\n selectionPosition: number;\n};\n\nfunction EditMode({\n children,\n setIsEditing,\n selectionPosition\n}: EditModeProps) {\n return (\n {\n setIsEditing(false);\n }, [setIsEditing])\n }}\n >\n \n Click to edit the following content:\n \n {children}\n \n );\n}\n\nexport default Field;\n","import React, { useState } from \"react\";\nimport { idGen } from \"../utils\";\nimport Field from \"./Field\";\nimport { FieldInputTextBaseProps } from \"./FieldInputText\";\nimport \"./FieldInputText.scss\";\n\ntype ReactHookFormInputProps = FieldInputTextBaseProps & {\n placeholder?: string | null;\n};\n\nexport const InputText_ReactHookForm = React.forwardRef(\n (\n {\n label,\n name,\n onChange,\n className: propClassName,\n maxLength,\n onKeyPress,\n placeholder = \"\"\n }: ReactHookFormInputProps,\n ref: React.Ref\n ) => {\n const className = `field__input-text field-padding ${propClassName}`;\n const [id] = useState(idGen());\n return (\n \n \n \n );\n }\n);\n\nexport default InputText_ReactHookForm;\n","import React, { useState, ChangeEventHandler } from \"react\";\nimport classnames from \"classnames\";\nimport { idGen } from \"../utils\";\nimport Field, { FieldContext, FieldContextType } from \"./Field\";\nimport \"./FieldTextarea.scss\";\n\ntype Props = {\n label: React.ReactNode;\n value?: string;\n onChange?: ChangeEventHandler;\n noresize?: boolean;\n className?: string;\n placeholder?: string | null;\n};\n\nconst Textarea = ({\n label,\n className: classes = \"\",\n value,\n onChange,\n noresize,\n placeholder\n}: Props) => {\n const [id] = useState(idGen());\n const [hasHadInitialFocus, setInitialFocus] = useState(false);\n\n return (\n \n \n {({ onBlur, selectionPosition }: FieldContextType) => {\n return (\n
\n {\n setInitialFocus(false);\n onBlur(e);\n }}\n ref={(inputRef) => {\n if (inputRef) {\n inputRef.focus();\n if (!hasHadInitialFocus) {\n setInitialFocus(true);\n inputRef.selectionStart = selectionPosition;\n inputRef.selectionEnd = selectionPosition;\n }\n }\n }}\n id={id}\n value={value}\n onChange={onChange}\n className={classnames(\n \"field__textarea field-padding\",\n classes,\n {\n \"field__textarea--noresize\": noresize\n }\n )}\n placeholder={placeholder || undefined}\n />\n
\n );\n }}\n
\n \n );\n};\n\nexport default Textarea;\n","import React, { useState, ChangeEventHandler } from \"react\";\nimport { idGen } from \"../utils\";\nimport Field from \"./Field\";\nimport \"./FieldSelect.scss\";\n\ntype Props = {\n label: React.ReactNode;\n children: React.ReactNode;\n value: string;\n onChange: ChangeEventHandler;\n};\n\nconst Select = ({ label, value, onChange, children }: Props) => {\n const [id] = useState(idGen());\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default Select;\n","import React, { useState, useEffect, Fragment } from \"react\";\nimport ColorPicker from \"react-simple-colorpicker\";\nimport rgbHex from \"rgb-hex\";\nimport { idGen } from \"../utils\";\nimport \"./FieldInputColour.scss\";\nimport \"./ColorPicker.scss\";\nimport Field from \"../Field/Field\";\n\ntype Props = {\n label: React.ReactNode;\n value: string;\n onChange: (hex: string) => void;\n};\n\nconst InputColour = ({ label, value, onChange }: Props) => {\n const [id] = useState(idGen());\n\n useEffect(() => {\n onChange(value); // on mount set value once\n }, [value]);\n\n const tooltip =\n \"Colour can only be chosen for a long term outcome and not for a medium or short term outcome. This logic has to do with the creation of coloured groups of outcomes related to a single long term outcome\";\n return (\n \n \n
\n {tooltip}\n {\n const hex = `#${rgbHex(rgba).substr(0, 6)}`;\n onChange(hex);\n }}\n />\n
\n \n
\n );\n};\n\nexport default InputColour;\n","import React, { useState } from \"react\";\nimport { FieldInputTextBaseProps } from \"./FieldInputText\";\nimport { idGen } from \"../utils\";\nimport Field, { FieldContext, FieldContextType } from \"./Field\";\nimport \"./FieldInputText.scss\";\n\ntype PlainInputProps = FieldInputTextBaseProps & {\n value: string;\n forceEditMode?: boolean | undefined;\n placeholder?: string | null;\n};\n\nexport const InputText_Plain = ({\n label,\n name,\n value,\n onChange,\n className: propClassName,\n maxLength,\n forceEditMode,\n placeholder,\n onKeyPress\n}: PlainInputProps) => {\n const className = `field__input-text field-padding ${propClassName}`;\n const [id] = useState(idGen());\n const [hasHadInitialFocus, setInitialFocus] = useState(false);\n\n return (\n \n \n {({ onBlur, selectionPosition }: FieldContextType) => {\n return (\n {\n setInitialFocus(false);\n onBlur(e);\n }}\n ref={(inputRef) => {\n if (inputRef) {\n inputRef.focus();\n if (!hasHadInitialFocus) {\n setInitialFocus(true);\n inputRef.selectionStart = selectionPosition;\n inputRef.selectionEnd = selectionPosition;\n }\n }\n }}\n id={id}\n value={value}\n onChange={onChange}\n type=\"text\"\n className={className}\n name={name}\n maxLength={maxLength}\n onKeyPress={onKeyPress}\n />\n );\n }}\n \n \n );\n};\n\nexport default InputText_Plain;\n","type LookupType = { [fieldId: string]: string };\n\nexport const GLOSS = {\n CARD_INPUT_PLACEHOLDER: \"CARD_INPUT\",\n CARD_INPUT_PLACEHOLDER_ASSUMPTIONS: \"CARD_INPUT_PLACEHOLDER_ASSUMPTIONS\",\n CARD_INPUT_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST:\n \"CARD_INPUT_PLACEHOLDER_INPUT\",\n CARD_INPUT_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES:\n \"CARD_INPUT_PLACEHOLDER_NEW_OUTPUT\",\n CARD_INPUT_PLACEHOLDER_SHORT_TERM_OUTCOME:\n \"CARD_INPUT_PLACEHOLDER_SHORT_TERM_OUTCOME\",\n CARD_INPUT_PLACEHOLDER_MEDIUM_TERM_OUTCOME:\n \"CARD_INPUT_PLACEHOLDER_MEDIUM_TERM_OUTCOME\",\n CARD_INPUT_PLACEHOLDER_LONG_TERM_OUTCOME:\n \"CARD_INPUT_PLACEHOLDER_LONG_TERM_OUTCOME\",\n\n CARD_DESCRIPTION_PLACEHOLDER: \"CARD_DESCRIPTION_INPUT\",\n CARD_DESCRIPTION_PLACEHOLDER_ASSUMPTIONS:\n \"CARD_DESCRIPTION_PLACEHOLDER_ASSUMPTIONS\",\n CARD_DESCRIPTION_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST:\n \"CARD_DESCRIPTION_PLACEHOLDER_INPUT\",\n CARD_DESCRIPTION_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES:\n \"CARD_DESCRIPTION_PLACEHOLDER_NEW_OUTPUT\",\n CARD_DESCRIPTION_PLACEHOLDER_SHORT_TERM_OUTCOME:\n \"CARD_DESCRIPTION_PLACEHOLDER_SHORT_TERM_OUTCOME\",\n CARD_DESCRIPTION_PLACEHOLDER_MEDIUM_TERM_OUTCOME:\n \"CARD_DESCRIPTION_PLACEHOLDER_MEDIUM_TERM_OUTCOME\",\n CARD_DESCRIPTION_PLACEHOLDER_LONG_TERM_OUTCOME:\n \"CARD_DESCRIPTION_PLACEHOLDER_LONG_TERM_OUTCOME\",\n\n CARD_INDICATOR_LABEL_PLACEHOLDER: \"CARD_INDICATOR_LABEL_PLACEHOLDER\",\n CARD_INDICATOR_TITLE_PLACEHOLDER: \"CARD_INDICATOR_TITLE_PLACEHOLDER\",\n CARD_INDICATOR_DESCRIPTION_PLACEHOLDER:\n \"CARD_INDICATOR_DESCRIPTION_PLACEHOLDER\",\n CARD_INDICATOR_WHO_COLLECTS_PLACEHOLDER:\n \"CARD_INDICATOR_WHO_COLLECTS_PLACEHOLDER\",\n CARD_INDICATOR_HOW_TO_COLLECT_PLACEHOLDER:\n \"CARD_INDICATOR_HOW_TO_COLLECT_PLACEHOLDER\",\n CARD_INDICATOR_HOW_OFTEN_TO_COLLECT_PLACEHOLDER:\n \"CARD_INDICATOR_HOW_OFTEN_TO_COLLECT_PLACEHOLDER\",\n\n LIST_UPDATE_TITLE_PLACEHOLDER: \"LIST_UPDATE_TITLE_PLACEHOLDER\",\n LIST_UPDATE_TIP_PLACEHOLDER: \"LIST_UPDATE_TIP_PLACEHOLDER\"\n};\n\nconst glossaryLookup = {} as LookupType;\n\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER] =\n \"The title will be displayed on the card\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_ASSUMPTIONS] =\n \"Allocation of this resources across regions is informed by the equity index. This includes investing in Trainers, Tutors, and RR teachers.\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST] =\n \"$50k annual allowance\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES] =\n \"Principals are recruited\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_SHORT_TERM_OUTCOME] =\n \"Quality leadership is initiated with community contribution\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_MEDIUM_TERM_OUTCOME] =\n \"Quality leadership has positive impact on teaching practice\";\nglossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_LONG_TERM_OUTCOME] =\n \"Distributed leadership is embedded\";\n\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER] = \"Description\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_ASSUMPTIONS] =\n \"Assumptions are the conditions that are necessary for success, and you believe are true. Your programme needs these conditions in order to succeed, but you believe these conditions already exist – they are not something you bring about with your programme activities.\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST] =\n \"In evaluation, we call this ‘Inputs’. It refers to the resources we invest in the programme, policy or initiative. The resources include human, financial, organisational, and community resources available for carrying out a programme's activities.\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES] =\n \"This is also known as Outputs and/or Activities. Outputs are what we do with the resources we provide. These are the widgets that we produce or activities we implement. Activities are the processes, tools, events and actions that are used to bring about a programme’s itended changes or results. Inputs and activities can be lumped together but you can also create a separate Activities row.\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_SHORT_TERM_OUTCOME] =\n \"Short-Term Outcomes refer to changes in awareness, knowledge, attitudes, skills, opinions, aspirations and motivation. They are measured at the end of the project, programme or initiative. They can be directly tied to the intervention.\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_MEDIUM_TERM_OUTCOME] =\n \"Medium-Term Outcomes refer to refers to changes in behaviour, practice, decision-making, policies and social action. Depending on the complexity of the program. Medium-Term Outcomes are usually measured within 2-3 years of implementation.\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER] = \"Add your description\";\nglossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_LONG_TERM_OUTCOME] =\n \"Long-Term Outcomes refer to changes in economic, social, civic, environmental conditions. They are measured several years after programme completion. They are hard to directly connect to the intervention. These levels of outcomes are related and built on the short and medium term outcomes. \";\n\n// glossaryLookup[GLOSS.CARD_INPUT_PLACEHOLDER_SECONDARY] =\n// \"this will show on the card \";\n// glossaryLookup[GLOSS.CARD_DESCRIPTION_PLACEHOLDER_SECONDARY] =\n// \"this is the description\";\n\nglossaryLookup[GLOSS.CARD_INDICATOR_LABEL_PLACEHOLDER] =\n \"this is the label description\";\nglossaryLookup[GLOSS.CARD_INDICATOR_TITLE_PLACEHOLDER] =\n \"this is the title description\";\nglossaryLookup[GLOSS.CARD_INDICATOR_DESCRIPTION_PLACEHOLDER] =\n \"this is the indicator description\";\nglossaryLookup[GLOSS.CARD_INDICATOR_WHO_COLLECTS_PLACEHOLDER] =\n \"this is the who description\";\nglossaryLookup[GLOSS.CARD_INDICATOR_HOW_TO_COLLECT_PLACEHOLDER] =\n \"this is the how description\";\nglossaryLookup[GLOSS.CARD_INDICATOR_HOW_OFTEN_TO_COLLECT_PLACEHOLDER] =\n \"this is the how often description\";\n\nglossaryLookup[GLOSS.LIST_UPDATE_TITLE_PLACEHOLDER] =\n \"this is the title of the list\";\nglossaryLookup[GLOSS.LIST_UPDATE_TIP_PLACEHOLDER] =\n \"this is the tip on roll over of the list\";\n\nexport const getGloss = (id: string): string | null => {\n return glossaryLookup[id];\n};\n","import React from \"react\";\nimport { IndicatorType } from \"../Board/Board.component\";\nimport InputTextPlain from \"../Field/FieldInputTextPlain\";\nimport InputTextArea from \"../Field/FieldTextarea\";\nimport FieldButton from \"../Field/FieldButton\";\nimport { getGloss, GLOSS } from \"../Field/getGloss\";\n\ntype Props = {\n indicator: IndicatorType;\n forceEditMode: boolean;\n onChange: (id: string, updatedProps: Partial) => void;\n onRemoveIndicatorFromList: (id: string) => void;\n};\n\nconst IndicatorEdit = ({\n indicator,\n onChange,\n forceEditMode,\n onRemoveIndicatorFromList\n}: Props) => {\n // const metadata = indicator.metadata ? indicator.metadata : [];\n\n const onNameChange = (event: any) => {\n onChange(indicator.id, { title: event.target.value });\n };\n const onLabelChange = (event: any) => {\n onChange(indicator.id, { label: event.target.value });\n };\n\n const onDescriptionChange = (event: any) => {\n onChange(indicator.id, { description: event.target.value });\n };\n const onWhoChange = (event: any) => {\n onChange(indicator.id, { who: event.target.value });\n };\n const onHowOftenChange = (event: any) => {\n onChange(indicator.id, { howOften: event.target.value });\n };\n const onHowChange = (event: any) => {\n onChange(indicator.id, { how: event.target.value });\n };\n\n return (\n
\n \n \n\n \n \n \n \n
\n\n {\n const result = window.confirm(\n `Confirm deleting \"${indicator.title}\"?`\n );\n if (result) {\n onRemoveIndicatorFromList(indicator.id);\n }\n }}\n icon=\"delete\"\n >\n Delete Indicator\n \n
\n );\n};\n\nexport default IndicatorEdit;\n","import React, { useState } from \"react\";\nimport { idGen } from \"../utils\";\nimport Field from \"./Field\";\nimport \"./FieldCheckList.scss\";\n\ntype Props = {\n label: string;\n items: { label: string; value: string; checked: boolean; name: string }[];\n\n onChange: (id: string, isChecked: boolean) => void;\n};\n\nconst FieldCheckList = ({ label, items, onChange }: Props) => {\n const [id] = useState(idGen());\n\n const onItemChange = (e: React.ChangeEvent) => {\n onChange(e.target.value, e.target.checked);\n };\n\n return (\n \n
    \n {items.map(({ label, value, checked, name }) => (\n
  • \n \n
  • \n ))}\n
\n \n );\n};\n\nexport default FieldCheckList;\n","import React, { useState, Fragment, useEffect } from \"react\";\nimport useForm from \"react-hook-form\";\nimport {\n Accordion,\n AccordionItem,\n AccordionItemHeading,\n AccordionItemPanel,\n AccordionItemButton\n} from \"react-accessible-accordion\";\n\nimport \"../../Field/ReactAccessibleAccordion.scss\";\nimport FieldButton from \"../../Field/FieldButton\";\n\nimport BoardContext, { BoardContextType } from \"../BoardState\";\nimport { IndicatorType, ListType, TaskWithStyleType } from \"../Board.component\";\nimport InputTextReactHookForm from \"../../Field/FieldInputTextReactHookForm\";\n\nimport \"./BoardCardView.scss\";\nimport FieldTextArea from \"../../Field/FieldTextarea\";\nimport FieldSelect from \"../../Field/FieldSelect\";\nimport { getListDetailsFromTask } from \"../Board.utils\";\nimport InputColour from \"../../Field/FieldInputColour\";\n\nimport IndicatorEdit from \"../../Indicator/IndicatorEdit.form.component\";\nimport { idGen } from \"../../utils\";\nimport FieldCheckList from \"../../Field/FieldCheckList\";\nimport { getGloss, GLOSS } from \"../../Field/getGloss\";\n\nconst DEFAULT_HIGH_LEVEL_COLOUR = \"#00FF00\";\nconst FIELDS_LABEL = \"label\";\n\ntype Props = {\n taskID: string;\n indicatorID?: string | undefined;\n isNew?: boolean;\n targetListID?: string;\n closeModal: Function;\n setCanClose: (value: boolean) => void;\n};\n\nconst BoardModalCard = ({\n taskID,\n targetListID,\n closeModal,\n isNew = false,\n setCanClose,\n indicatorID\n}: Props) => {\n const [archivedListID, setArchivedListID] = useState();\n\n const formResult = useForm();\n let { register, triggerValidation, errors, getValues, setValue } =\n formResult || {\n register: undefined,\n triggerValidation: undefined,\n errors: undefined,\n getValues: undefined,\n setValue: undefined\n };\n\n const hasErrors = Object.values(errors).length > 0;\n const isArchived = archivedListID ? true : false;\n\n useEffect(() => {\n if (indicatorID) {\n const selectedIndicator = document.getElementById(\n `accordion__panel-${indicatorID}`\n );\n\n if (selectedIndicator) {\n selectedIndicator.scrollIntoView();\n }\n }\n }, [indicatorID]);\n\n setCanClose(isNew || isArchived || !hasErrors);\n\n const [RAAUpdateID, setRAAUpdateID] = useState(0);\n\n return (\n \n {(boardValue: BoardContextType) => {\n const {\n lists,\n onAddIndicatorToList,\n onUpdateIndicator,\n onAddHighLevelLink,\n onRemoveHighLevelLink,\n onRemoveIndicatorFromList\n } = boardValue;\n const task: undefined | TaskWithStyleType = boardValue.tasks[taskID];\n const allIndicators: IndicatorType[] = Object.values(\n boardValue.indicators\n );\n const {\n listID = targetListID,\n highLevelListID = \"\",\n list\n } = getListDetailsFromTask(taskID, lists);\n const listArray = Object.values(\n boardValue.lists\n ).reverse() as ListType[];\n\n if (getValues()[FIELDS_LABEL] !== task.label) {\n setValue(FIELDS_LABEL, task ? task.label : \"\");\n }\n\n const onAddIndicatorClick = () => {\n onAddIndicatorToList(\n {\n description: \"\",\n label: \"\",\n title: \"\",\n id: idGen()\n },\n task.id\n );\n\n setRAAUpdateID(RAAUpdateID + 1);\n };\n\n const onLabelChange = (event: any) => {\n triggerValidation();\n boardValue.onUpdateCard(task.id, {\n label: getValues()[FIELDS_LABEL]\n });\n };\n const onDescriptionChange = (event: any) => {\n boardValue.onUpdateCard(task.id, { description: event.target.value });\n };\n\n const onArchiveClick = () => {\n // add undo action\n const fromListID = boardValue.onArchiveCard(task.id);\n setArchivedListID(fromListID);\n };\n\n const onSaveClick = async () => {\n const valid = await triggerValidation();\n if (valid) {\n closeModal();\n }\n };\n\n const onCancelClick = () => {\n boardValue.onArchiveCard(task.id);\n closeModal();\n };\n const onUndoClick = () => {\n // undo action\n boardValue.onMoveTaskToListReducer(task.id, archivedListID);\n setArchivedListID(undefined);\n };\n\n const setTargetListID = (listID: string) => {\n boardValue.onMoveTaskToListReducer(taskID, listID);\n };\n\n if (!task) {\n return Unrecognised {taskID};\n }\n\n let taskHeader: string = \"\";\n\n const currentList: ListType | undefined = listArray.find(\n (list) => list.id === listID\n );\n // theoraticly there is always a list!\n if (currentList) {\n taskHeader = isNew ? `New ${currentList.title}` : currentList.title;\n } else {\n taskHeader = \"New\";\n }\n\n const titleLabel = isNew ? \"Title\" : \"\";\n const indicatorsOfTask = allIndicators.filter(\n ({ id }) => task.indicators && task.indicators.indexOf(id) !== -1\n );\n\n const onUpdateCardColour = (value: string) => {\n boardValue.onUpdateCard(task.id, { cardColour: [value] });\n };\n const cardColour = task.cardColour\n ? task.cardColour[0]\n : DEFAULT_HIGH_LEVEL_COLOUR;\n\n const closeModalFooterButton = (\n {\n closeModal();\n }}\n className=\"field__button field__button--success field__button--right\"\n >\n Done\n \n );\n\n const showHighLevelCheckList =\n listID !== \"\" && listID !== highLevelListID;\n\n const checkListItems = boardValue.lists[highLevelListID].taskIds.map(\n (taskID: string) => {\n const label = boardValue.tasks[taskID].label;\n const checked = task.highLevelTaskIDs\n ? task.highLevelTaskIDs.indexOf(taskID) > -1\n : false;\n return { label, value: taskID, checked, name: \"LTO\" };\n }\n );\n\n const getNoLabelIndicators = (): string[] | undefined => {\n const filtered = indicatorsOfTask.filter(({ label }) => {\n return !label || label.length < 1;\n });\n const ids = filtered.map((indicator) => {\n return indicator.id;\n });\n if (indicatorsOfTask) {\n return ids;\n } else {\n return undefined;\n }\n };\n\n const getDescriptionPlaceHolderByListId = (\n listId: string | undefined\n ): string => {\n switch (listId) {\n //assumptions\n case \"list-0\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_ASSUMPTIONS;\n break;\n //Input\n case \"list-1\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST;\n break;\n //new output\n case \"list-2\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES;\n break;\n //short term outcome\n case \"list-3\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_SHORT_TERM_OUTCOME;\n break;\n //medium term outcome\n case \"list-4\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_MEDIUM_TERM_OUTCOME;\n break;\n //lomg term outcome\n case \"list-5\":\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER_LONG_TERM_OUTCOME;\n break;\n\n default:\n return GLOSS.CARD_DESCRIPTION_PLACEHOLDER;\n break;\n }\n };\n const getTitlePlaceHolderByListId = (\n listId: string | undefined\n ): string => {\n switch (listId) {\n //assumptions\n case \"list-0\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_ASSUMPTIONS;\n break;\n //Input\n case \"list-1\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_WHAT_RESOURCES_WE_INVEST;\n break;\n //new output\n case \"list-2\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_WHAT_WE_DO_WITH_RESOURCES;\n break;\n //short term outcome\n case \"list-3\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_SHORT_TERM_OUTCOME;\n break;\n //medium term outcome\n case \"list-4\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_MEDIUM_TERM_OUTCOME;\n break;\n //lomg term outcome\n case \"list-5\":\n return GLOSS.CARD_INPUT_PLACEHOLDER_LONG_TERM_OUTCOME;\n break;\n\n default:\n return GLOSS.CARD_INPUT_PLACEHOLDER;\n break;\n }\n };\n\n // if we want to open a specifiv Indicator\n const preExpandedAccordionItems = indicatorID\n ? [indicatorID]\n : // let's open all indicators that don't have a label\n getNoLabelIndicators();\n\n // setplaceholders based on type\n const type = listID && lists[listID] ? lists[listID].type : \"standard\";\n const isStandardList = type === \"standard\";\n\n console.log({ listID });\n\n const highLevelName =\n listID && lists[highLevelListID]\n ? lists[highLevelListID].title\n : \"Outcome\";\n\n return (\n
\n

{taskHeader}

\n\n \n\n \n {!archivedListID && listID && (\n {\n setTargetListID(event.target.value);\n }}\n >\n {listArray.map((list: ListType) => (\n \n ))}\n \n )}\n\n {listID !== \"\" && listID === highLevelListID && (\n \n )}\n\n {showHighLevelCheckList && (\n {\n if (isChecked) {\n onAddHighLevelLink(task.id, id);\n } else {\n onRemoveHighLevelLink(task.id, id);\n }\n }}\n />\n )}\n\n {(!list || (list && list.type === \"outcome\")) && (\n \n

Indicators:

\n\n \n {indicatorsOfTask.map((indicator) => {\n const forceEditMode =\n preExpandedAccordionItems &&\n preExpandedAccordionItems.indexOf(indicator.id) > -1\n ? true\n : false;\n\n return (\n \n \n \n {indicator.label}\n \n \n \n \n \n \n );\n })}\n \n
\n
\n \n Add Indicator\n \n
\n
\n
\n )}\n\n {!archivedListID && !isNew && (\n
\n {closeModalFooterButton}\n \n Delete card\n \n
\n )}\n {archivedListID && (\n
\n {closeModalFooterButton}\n \n Restore card\n \n
\n )}\n\n {isNew && (\n
\n \n Save\n \n\n \n
\n )}\n
\n );\n }}\n
\n );\n};\n\nexport default BoardModalCard;\n","import { Styles } from \"react-modal\";\nimport \"./BoardModal.scss\";\n\nexport const modalStyles: Styles = {\n overlay: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1000,\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n display: \"flex\"\n },\n content: {\n top: \"50%\",\n transform: \"translateY(-50%)\",\n bottom: \"auto\",\n\n margin: \"0 auto\",\n maxWidth: \"600px\",\n width: \"100%\",\n // height: \"100%\",\n maxHeight: \"95vh\",\n overflow: \"auto\",\n overflowX: \"hidden\",\n overflowY: \"scroll\"\n }\n};\n","import React from \"react\";\nimport Modal, { Styles } from \"react-modal\";\nimport AppContext from \"../AppState\";\nimport { modalStyles } from \"./Modal.styles\";\n\ntype Props = {\n children: React.ReactNode;\n isOpen: boolean;\n contentLabel: string;\n styles?: Styles;\n disableClose?: boolean;\n closeModal: Function;\n};\n\nconst ModalContainer = ({\n children,\n isOpen,\n contentLabel,\n disableClose,\n styles,\n closeModal\n}: Props) => {\n return (\n \n {value => {\n if (!value.modals.setModalOpen || !value.modals) return;\n const onCloseClick = () => {\n if (!disableClose) {\n closeModal();\n }\n };\n return (\n \n {!disableClose && (\n \n ✕\n \n )}\n {isOpen && children}\n \n );\n }}\n \n );\n};\n\nif (process.env.NODE_ENV !== \"test\") {\n // Jest tests don't have a DOM so this would fail\n // and also this is unnecessary\n Modal.setAppElement(\"#root\");\n}\n\nexport default ModalContainer;\n","import React from \"react\";\nimport BoardContext, { BoardContextType } from \"../Board/BoardState\";\n\nimport FieldSelect from \"../Field/FieldSelect\";\n\nconst FilterModal = () => {\n return (\n \n {(boardValue: BoardContextType) => {\n const { unfilteredLists, filter, highLevelListID } = boardValue;\n const hasHighLevelCards =\n unfilteredLists[highLevelListID].taskIds &&\n unfilteredLists[highLevelListID].taskIds.length > 0;\n\n const highLevelName = unfilteredLists[highLevelListID].title;\n return (\n
\n

Filters

\n\n {hasHighLevelCards ? (\n
\n
\n {\n const value =\n event.target.value === \"reset\"\n ? undefined\n : event.target.value;\n\n const filter = value\n ? {\n // or highleveltaskIDs contain value\n highLevelTaskIDs: value,\n // or the id matches\n id: value\n }\n : undefined;\n boardValue.onSetFilter(filter);\n }}\n >\n \n {unfilteredLists[highLevelListID].taskIds.map(\n (taskID: string) => (\n \n )\n )}\n \n
\n\n \n
\n ) : (\n \n No long term outcomes to filter on.\n
Please add some and try again.\n
\n )}\n
\n );\n }}\n
\n );\n};\n\nexport default FilterModal;\n","import React from \"react\";\nimport BoardContext, { BoardContextType } from \"../Board/BoardState\";\n\nimport FieldTextArea from \"../Field/FieldTextarea\";\nimport FieldInputTextPlain from \"../Field/FieldInputTextPlain\";\nimport \"./EvaluationView.scss\";\n\nconst ENTER_KEY = 13;\nconst disableNewlines = (event: React.KeyboardEvent) => {\n const keyCode = event.keyCode || event.which;\n\n if (keyCode === ENTER_KEY) {\n if (event.preventDefault) event.preventDefault();\n }\n};\n\nconst EvaluationModal = () => {\n return (\n \n {(boardValue: BoardContextType) => {\n const {\n evaluationTitle,\n evaluationDescription,\n onSetEvaluationTitle,\n onSetEvaluationDescription\n } = boardValue;\n\n const onChangeTitle = (event: React.ChangeEvent) => {\n onSetEvaluationTitle(event.target.value);\n };\n\n const onChangeDescription = (\n event: React.ChangeEvent\n ) => {\n onSetEvaluationDescription(event.target.value);\n };\n\n return (\n
\n

Project Details

\n\n \n\n \n
\n );\n }}\n
\n );\n};\n\nexport default EvaluationModal;\n","import React, { Fragment } from \"react\";\nimport FieldSelect from \"../Field/FieldSelect\";\nimport FieldButton from \"../Field/FieldButton\";\n\nimport {\n ListCategoryType,\n ListType,\n LIST_CATEGORIES\n} from \"../Board/Board.component\";\nimport InputTextPlain from \"../Field/FieldInputTextPlain\";\nimport InputTextArea from \"../Field/FieldTextarea\";\nimport { getGloss, GLOSS } from \"../Field/getGloss\";\n\ntype Props = {\n list: ListType;\n onChange: (id: string, updatedProps: Partial) => void;\n onRemove: (id: string) => void;\n};\n\nconst ListEdit = ({ list, onChange, onRemove }: Props) => {\n const onTitleChange = (event: any) => {\n onChange(list.id, { title: event.target.value });\n };\n\n const onTipChange = (event: any) => {\n onChange(list.id, { tip: event.target.value });\n };\n const onTypeChange = (event: any) => {\n onChange(list.id, { type: event.target.value });\n };\n\n return (\n
\n \n \n\n {!list.isHighLevel && (\n \n \n {LIST_CATEGORIES.map((val: ListCategoryType) => (\n \n ))}\n \n\n
\n\n {\n const result = window.confirm(\n `Confirm deleting \"${list.title}\"?`\n );\n if (result) {\n onRemove(list.id);\n }\n }}\n icon=\"delete\"\n >\n Delete List\n \n
\n )}\n
\n );\n};\n\nexport default ListEdit;\n","import React, { useState } from \"react\";\nimport {\n Accordion,\n AccordionItem,\n AccordionItemHeading,\n AccordionItemButton,\n AccordionItemPanel\n} from \"react-accessible-accordion\";\nimport { DragDropContext, Draggable, Droppable } from \"react-beautiful-dnd\";\nimport filter from \"lodash/filter\";\n\nimport FieldButton from \"../Field/FieldButton\";\nimport BoardContext, { BoardContextType } from \"../Board/BoardState\";\nimport { CreateListPropsType } from \"../Board/Board.component\";\nimport ListEdit from \"./ListEdit.form.component\";\n\ntype Props = {\n preExpanded: string[];\n};\nconst UpdateListsView = ({ preExpanded }: Props) => {\n const [RAAUpdateID, setRAAUpdateID] = useState(0);\n return (\n \n {(boardValue: BoardContextType) => {\n const {\n lists,\n listsOrder,\n onCreateList,\n onUpdateList,\n onRemoveList,\n onDragListEnd\n } = boardValue;\n\n const onAddListClick = () => {\n const createListProps: CreateListPropsType = {\n type: \"standard\",\n title: \"\",\n tip: \"\"\n };\n onCreateList(createListProps);\n\n setRAAUpdateID(RAAUpdateID + 1);\n };\n\n const getNoTitleLists = (): string[] | undefined => {\n const noTitle = filter(\n lists,\n ({ title }) => !title || title.length === 0\n );\n const noTitleIDS = noTitle.map((list) => list.id);\n\n return noTitleIDS.length > 0 ? noTitleIDS : undefined;\n };\n\n const openByDefault = getNoTitleLists() || preExpanded;\n\n return (\n \n
\n

Update lists

\n\n \n \n {(provided) => {\n return (\n
\n {listsOrder.map((listId, index) => {\n const list = lists[listId];\n\n return (\n \n {(provided) => {\n return (\n \n \n \n \n {list.title}\n \n \n \n \n \n \n
\n );\n }}\n \n );\n })}\n {provided.placeholder}\n
\n );\n }}\n \n \n \n \n Add List\n \n \n \n
\n );\n }}\n
\n );\n};\n\nexport default UpdateListsView;\n","import React from \"react\";\n\nconst HelpView = () => {\n return (\n
\n

Help

\n

\n The Logic Model web application is a tool that will help you flesh out\n in detail the short, medium and long term outcomes that your programme,\n project or initiative intend to deliver. It will also help you visualise\n how the activities you will deliver will help achieve the outcomes you\n set out to achieve.\n

\n

\n If you need help with using the logic model app, contact the Analytics\n and Insights team, Ministry of Education at{\" \"}\n \n info.evaluationhub@education.govt.nz.\n \n

\n

\n Visit the{\" \"}\n \n Evaluation Hub\n {\" \"}\n website to learn more about this topic\n

\n Here is the{\" \"}\n \n Logic Model App Manual\n \n .\n
\n );\n};\n\nexport default HelpView;\n","import React from \"react\";\nimport { kebabCase } from \"lodash\";\nimport { saveAs } from \"file-saver\";\nimport dateFns from \"date-fns\";\nimport BoardContext, { VERSION_0_3 } from \"../Board/BoardState\";\nimport \"./Download.scss\";\nimport { useAppContext } from \"../AppState\";\nimport FieldButton from \"../Field/FieldButton\";\n\nconst TIME_FORMAT = \"DD-MM-YY-hh-mm-ss\";\n\nconst DownloadView = () => {\n const { modals } = useAppContext();\n const onCloseClick = () => {\n modals.closeModal();\n };\n return (\n \n {({\n lists,\n tasks,\n listsOrder,\n indicators,\n evaluationTitle,\n evaluationDescription\n }) => {\n const now = dateFns.format(new Date(), TIME_FORMAT);\n const fileName = `${kebabCase(evaluationTitle)}-${now}.json`;\n const onExportContext = () => {\n const toBackup: string = JSON.stringify({\n readme: \"Use the Learning Tool App to open this file\",\n version: VERSION_0_3,\n data: {\n lists,\n tasks,\n listsOrder,\n indicators,\n evaluationTitle,\n evaluationDescription\n }\n });\n const blob = new Blob([toBackup]);\n saveAs(blob, `${fileName}`);\n };\n\n return (\n
\n

\n You are about to download a Json file to your device\n

\n

\n Your work will be downloaded as a .json file. You can share it\n with others (i.e. attach the .json file to an email). Please note\n that you can only open the .json file via this website. If you\n want to save your work as a pdf, choose the “Print” option.\n

\n

{fileName}

\n
\n \n Download\n \n
\n Close\n
\n );\n }}\n
\n );\n};\n\nexport default DownloadView;\n","import React, { useRef, useState } from \"react\";\nimport { FileDrop } from \"react-file-drop\";\nimport BoardContext from \"../Board/BoardState\";\nimport \"./Upload.scss\";\nimport { useAppContext } from \"../AppState\";\nimport FieldButton from \"../Field/FieldButton\";\nimport { handleFileRead } from \"../Board/Board.utils\";\n\nconst UploadView = () => {\n const { modals } = useAppContext();\n const [currentFile, setCurrentFile] = useState(undefined);\n const [currentError, setCurrentError] = useState(\n undefined\n );\n const fileInputRef = useRef(null);\n const onCloseClick = () => {\n modals.closeModal();\n };\n\n const onTargetClick = () => {\n if (!fileInputRef.current) return;\n fileInputRef.current.click();\n };\n const onGetData = (event: React.ChangeEvent) => {\n if (\n !event ||\n !event.target ||\n !event.target.files ||\n event.target.files.length === 0\n )\n return;\n const file = event.target.files[0];\n if (file) {\n if (file.name.endsWith(\".json\")) {\n setCurrentError(undefined);\n setCurrentFile(file);\n } else {\n setCurrentError(\"Please select a .json file\");\n setCurrentFile(undefined);\n }\n }\n };\n return (\n \n {({ onImportData }) => {\n let fileReader: FileReader;\n const onUpload = () => {\n if (!currentFile) return;\n const file = currentFile;\n console.log({ file });\n fileReader = new FileReader();\n fileReader.onloadend = () => {\n handleFileRead({\n result: fileReader.result,\n onImportData\n });\n };\n if (file instanceof Blob) fileReader.readAsText(file);\n else {\n throw Error(`Invalid file. (code: ${typeof file})`);\n }\n };\n\n const disableUploadButton = !currentFile;\n console.log({ disableUploadButton });\n\n return (\n
\n

Upload

\n\n {\n if (!files) return;\n\n const jsonFile = [...files].filter((file: any) =>\n file.name.endsWith(\".json\")\n )[0];\n if (jsonFile) {\n setCurrentError(undefined);\n setCurrentFile(jsonFile);\n } else {\n setCurrentError(\"Please select a .json file\");\n setCurrentFile(undefined);\n }\n }}\n >\n
\n

\n Drag and drop your .json file here\n
\n or\n

\n \n Browse files\n \n
\n \n\n {\n if (onGetData) onGetData(e);\n }}\n type=\"file\"\n className=\"hidden\"\n />\n {currentFile && (\n
\n

\n Selected file: {currentFile.name}\n {` (${Math.round(currentFile.size / 1000)}Kb)`}\n

\n
\n {\n setCurrentFile(undefined);\n }}\n >\n Delete\n \n
\n
\n )}\n {currentError && (\n

{currentError}

\n )}\n
\n
\n Cancel\n
\n
\n \n Upload\n \n
\n
\n
\n );\n }}\n
\n );\n};\n\nexport default UploadView;\n","import React, { useState, Fragment } from \"react\";\nimport AppContext, { ModalOpenType } from \"../AppState\";\nimport Card from \"../Board/BoardCard/BoardCardView.modal.component\";\nimport ModalContainer from \"./ModalContainer.component\";\nimport FilterModal from \"../Filter/FilterView.modal.component\";\nimport EvaluationModal from \"../Evaluation/EvaluationView.modal.component\";\nimport UpdateListsView from \"../List/UpdateListsView.modal.component\";\nimport HelpView from \"../Help/HelpView.modal.component\";\nimport DownloadView from \"../Download/DownloadView.modal.component\";\nimport UploadView from \"../Upload/Upload.modal.component\";\n\nconst Modals = () => {\n const [canClose, setCanClose] = useState(true);\n return (\n \n {(value) => {\n const modalOpen: ModalOpenType = value.modals.modalOpen;\n const type: string =\n modalOpen !== \"Closed\" && modalOpen.type ? modalOpen.type : \"\";\n const targetId: string =\n modalOpen &&\n modalOpen !== \"Closed\" &&\n (modalOpen.type === \"CreateCard\" ||\n modalOpen.type === \"ViewOrEditCard\") &&\n modalOpen.targetId\n ? modalOpen.targetId\n : \"\";\n\n const targetIndicatorID =\n modalOpen &&\n modalOpen !== \"Closed\" &&\n modalOpen.type === \"ViewOrEditCard\" &&\n modalOpen.indicatorID\n ? modalOpen.indicatorID\n : undefined;\n const targetListID: string =\n modalOpen &&\n modalOpen !== \"Closed\" &&\n modalOpen.type === \"CreateCard\" &&\n modalOpen.targetListID\n ? modalOpen.targetListID\n : \"\";\n const updateListID: string =\n modalOpen &&\n modalOpen !== \"Closed\" &&\n modalOpen.type === \"UpdateLists\" &&\n modalOpen.updateListID\n ? modalOpen.updateListID\n : \"\";\n\n const disableClose = modalOpen && type === \"CreateCard\";\n\n const closeModal = () => {\n const { closeModal: close } = value.modals;\n if (canClose) {\n close();\n }\n };\n\n return (\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }}\n \n );\n};\nexport default Modals;\n","import React from \"react\";\nimport { HashRouter as Router, Switch, Route } from \"react-router-dom\";\n\nimport AppContext, { useModalState } from \"./AppState\";\nimport BoardContext, {\n useBoardState,\n BoardStateProps,\n TemplateNameType\n} from \"./Board/BoardState\";\nimport ToolBar from \"./Toolbar/ToolBar.component\";\nimport Home from \"./Routes/Home\";\nimport Summary from \"./Routes/Summary\";\nimport Modals from \"./Modal/Modals.component\";\n\nexport type AppProps = {\n template?: TemplateNameType | undefined;\n defaultBoardState?: BoardStateProps;\n};\n\nconst App = ({ defaultBoardState, template }: AppProps) => {\n const modals = useModalState();\n const boardState = useBoardState(\n defaultBoardState || ({} as BoardStateProps)\n );\n\n const {\n onSetEvaluationTitle,\n evaluationTitle,\n evaluationDescription,\n onSetEvaluationDescription,\n onSetFilter,\n filter,\n lists\n } = boardState;\n\n return (\n
\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default App;\n","import \"./polyfills\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./sass/index.scss\";\nimport \"./shame.scss\";\nimport App, { AppProps } from \"./App\";\nimport { fixHeadingOnXAxis } from \"./NonReact\";\n\nconst root: HTMLElement | null = document.getElementById(\"root\");\n\nif (root) {\n ReactDOM.render(, root, afterFirstRender);\n}\n\nexport const resetApp = (args: AppProps) => {\n //remove previous App and it's state\n if (root) {\n ReactDOM.unmountComponentAtNode(root);\n }\n //mount an App with a default state\n ReactDOM.render(, root, afterFirstRender);\n};\n\nfunction afterFirstRender() {\n fixHeadingOnXAxis();\n}\n\nwindow.addEventListener(\"beforeunload\", function (e) {\n e.preventDefault();\n e.returnValue = \"\";\n});\n","export function fixHeadingOnXAxis() {\n // This essentially does a position:fixed on one axis\n // It's done outside of React because React would add\n // nothing of value, and scroll handlers are notoriously\n // sluggish so we'll bypass React in this particular case\n\n let headings: NodeList;\n let lastScrollX: number;\n\n window.addEventListener(\n \"scroll\",\n e => {\n if (!headings) return;\n // If there's been no change on the X axis then exit early\n if (lastScrollX === window.scrollX) return;\n\n for (let i = 0; i < headings.length; i++) {\n const heading = headings[i] as HTMLElement;\n heading.style.left = window.scrollX + \"px\";\n }\n lastScrollX = window.scrollX;\n },\n true\n );\n\n const updateQueryAll = () => {\n // If React makes new nodes (a rare occasion in this app)\n // then we'll need to update 'headings' with that\n headings = document.querySelectorAll(\".boardlist__heading-container\");\n setTimeout(updateQueryAll, 1000);\n };\n\n updateQueryAll();\n}\n"],"sourceRoot":""}