-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 73.6 KB
/
.eslintcache
1
[{"/Volumes/DATA/GIT/snek-shipyard/watch/src/index.tsx":"1","/Volumes/DATA/GIT/snek-shipyard/watch/src/serviceWorker.ts":"2","/Volumes/DATA/GIT/snek-shipyard/watch/src/App.tsx":"3","/Volumes/DATA/GIT/snek-shipyard/watch/src/Routes.tsx":"4","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/index.ts":"5","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/index.ts":"6","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/index.ts":"7","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/ScrollToTop/index.ts":"8","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/actions/userActions.ts":"9","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/LoginPage/index.tsx":"10","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/index.ts":"11","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/userReducers.ts":"12","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/ohrwurmReducers.ts":"13","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/Breadcrumbs/index.tsx":"14","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/Mailto/index.tsx":"15","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/Login/index.tsx":"16","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/ServiceGroup/index.tsx":"17","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/ProjectTable/index.tsx":"18","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/TrackTable/index.tsx":"19","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/index.ts":"20","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/Navbar/index.tsx":"21","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/services/ohrwurm/index.tsx":"22","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/actions/ohrwurmActions.ts":"23","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/index.ts":"24","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/PasswordChangePage/index.tsx":"25","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/PasswordChange/index.tsx":"26","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/MemberTable/index.tsx":"27","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/MemberModal/index.tsx":"28","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/ProjectModal/index.tsx":"29","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/TrackModal/index.tsx":"30","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/ohrwurm/index.tsx":"31","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/ohrwurm/MemberPage/index.tsx":"32"},{"size":2570,"mtime":1609710454153,"results":"33","hashOfConfig":"34"},{"size":5290,"mtime":1609667515117,"results":"35","hashOfConfig":"34"},{"size":1176,"mtime":1609798166218,"results":"36","hashOfConfig":"34"},{"size":2613,"mtime":1609798166221,"results":"37","hashOfConfig":"34"},{"size":675,"mtime":1609699618302,"results":"38","hashOfConfig":"34"},{"size":326,"mtime":1609667763101,"results":"39","hashOfConfig":"34"},{"size":435,"mtime":1609704993715,"results":"40","hashOfConfig":"34"},{"size":1130,"mtime":1609667515113,"results":"41","hashOfConfig":"34"},{"size":4797,"mtime":1609699618324,"results":"42","hashOfConfig":"34"},{"size":3706,"mtime":1609667763106,"results":"43","hashOfConfig":"34"},{"size":791,"mtime":1609667763107,"results":"44","hashOfConfig":"34"},{"size":1664,"mtime":1609699618331,"results":"45","hashOfConfig":"34"},{"size":1621,"mtime":1609803299017,"results":"46","hashOfConfig":"34"},{"size":974,"mtime":1609667763101,"results":"47","hashOfConfig":"34"},{"size":639,"mtime":1609667763101,"results":"48","hashOfConfig":"34"},{"size":2973,"mtime":1609667763102,"results":"49","hashOfConfig":"34"},{"size":1881,"mtime":1609667763102,"results":"50","hashOfConfig":"34"},{"size":2189,"mtime":1609803299012,"results":"51","hashOfConfig":"34"},{"size":3896,"mtime":1609803299012,"results":"52","hashOfConfig":"34"},{"size":261,"mtime":1609685713836,"results":"53","hashOfConfig":"34"},{"size":3002,"mtime":1609699618308,"results":"54","hashOfConfig":"34"},{"size":10184,"mtime":1609803299014,"results":"55","hashOfConfig":"34"},{"size":11761,"mtime":1609803855957,"results":"56","hashOfConfig":"34"},{"size":348,"mtime":1609703681058,"results":"57","hashOfConfig":"34"},{"size":2859,"mtime":1609699618332,"results":"58","hashOfConfig":"34"},{"size":3956,"mtime":1609699618306,"results":"59","hashOfConfig":"34"},{"size":1977,"mtime":1609803299011,"results":"60","hashOfConfig":"34"},{"size":5272,"mtime":1609803299013,"results":"61","hashOfConfig":"34"},{"size":5932,"mtime":1609803299013,"results":"62","hashOfConfig":"34"},{"size":10814,"mtime":1609803299015,"results":"63","hashOfConfig":"34"},{"size":1964,"mtime":1609705021647,"results":"64","hashOfConfig":"34"},{"size":3631,"mtime":1609705177367,"results":"65","hashOfConfig":"34"},{"filePath":"66","messages":"67","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},"a98p3y",{"filePath":"69","messages":"70","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"71","messages":"72","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"73","usedDeprecatedRules":"68"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"76","usedDeprecatedRules":"68"},{"filePath":"77","messages":"78","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"79","messages":"80","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"97","usedDeprecatedRules":"68"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"102","usedDeprecatedRules":"68"},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"107","messages":"108","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"109","usedDeprecatedRules":"68"},{"filePath":"110","messages":"111","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"112","messages":"113","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"114","usedDeprecatedRules":"68"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"117","usedDeprecatedRules":"68"},{"filePath":"118","messages":"119","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"120","messages":"121","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"122","messages":"123","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"124","messages":"125","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"126","usedDeprecatedRules":"68"},{"filePath":"127","messages":"128","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"129","usedDeprecatedRules":"68"},{"filePath":"130","messages":"131","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"132","usedDeprecatedRules":"68"},{"filePath":"133","messages":"134","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"135","usedDeprecatedRules":"68"},{"filePath":"136","messages":"137","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"138","usedDeprecatedRules":"68"},{"filePath":"139","messages":"140","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"68"},{"filePath":"141","messages":"142","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"143","usedDeprecatedRules":"68"},"/Volumes/DATA/GIT/snek-shipyard/watch/src/index.tsx",[],["144","145"],"/Volumes/DATA/GIT/snek-shipyard/watch/src/serviceWorker.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/App.tsx",["146"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { useEffect } from \"react\";\n// DOM bindings for React Router\nimport { withRouter } from \"react-router-dom\";\n//> Redux\n// Allows to React components read data from a Redux store, and dispatch actions\n// to the store to update data.\nimport { useDispatch } from \"react-redux\";\n\n//> Components\n// Starts the page on top when reloaded or redirected\nimport { ScrollToTop } from \"./components/atoms\";\n//> Stylesheet\nimport \"./App.css\";\n//> Routes\nimport Routes from \"./Routes\";\nimport { loginAction } from \"./store/actions/userActions\";\n//#endregion\n\n//#region > Components\n/**\n * @class Root component which loads all other components\n */\nconst App = () => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(loginAction());\n });\n\n return (\n <>\n <div className=\"flyout\">\n <main>\n <Routes />\n </main>\n {/* <Footer /> */}\n </div>\n </>\n );\n};\n//#endregion\n\n//#region > Exports\nexport default withRouter(App);\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/Routes.tsx",["147","148","149","150","151"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n// DOM bindings for React Router\nimport {\n Redirect,\n Route,\n Switch,\n RouteComponentProps,\n withRouter,\n} from \"react-router-dom\";\n//> Redux\n// Allows to React components read data from a Redux store, and dispatch actions\n// to the store to update data.\nimport { connect } from \"react-redux\";\n\n//> Components\nimport { OhrwurmPage, OhrwurmMemberPage } from \"./components/pages\";\nimport LoginPage from \"./components/pages/LoginPage/index\";\nimport PasswordChangePage from \"./components/pages/PasswordChangePage/index\";\nimport MemberPage from \"./components/pages/ohrwurm/MemberPage\";\n\nimport { RootState } from \"./store/reducers/index\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { UserState } from \"./store/types\";\nimport { Ohrwurm } from \"./components/organisms\";\n//#endregion\n\ninterface OwnProps {}\ninterface StateProps {\n user: UserState;\n}\ninterface DispatchProps {}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n\n//#region > Components\n/** @class Route component which includes all routes to specified components */\nclass Routes extends React.Component<Props, {}> {\n render() {\n const { anonymous, passwordChanged } = this.props.user;\n const location = this.props.location;\n\n if (anonymous && location.pathname === \"/\")\n this.props.history.push(\"/login\");\n\n if (anonymous === false && location.pathname === \"/login\")\n this.props.history.push(\"/\");\n\n return (\n <Switch>\n <Route exact path=\"/\" component={() => <OhrwurmPage />} />\n <Route exact path=\"/member\" component={() => <OhrwurmMemberPage />} />\n <Route exact path=\"/login\" component={() => <LoginPage />} />\n <Route\n exact\n path=\"/change-password\"\n component={() => <PasswordChangePage />}\n />\n </Switch>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ user: state.user });\n\nconst mapDispatchToProps = (dispatch: any) => {\n return {};\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Routes));\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/ScrollToTop/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/store/actions/userActions.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/LoginPage/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/userReducers.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/store/reducers/ohrwurmReducers.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/Breadcrumbs/index.tsx",["152"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport { MDBBreadcrumb, MDBBreadcrumbItem } from \"mdbreact\";\n\n//> Stylesheet\nimport \"./breadcrumbs.scss\";\n//#endregion\n\n//#region > Components\nconst Breadcrumbs = (props: {\n crumbs: { name: string; active?: boolean; onClick?: () => void }[];\n}) => {\n return (\n <MDBBreadcrumb>\n {props.crumbs.map((e, index) =>\n !e.active ? (\n <MDBBreadcrumbItem key={index}>\n <a href=\"#\" onClick={() => (e.onClick ? e.onClick() : undefined)}>\n {e.name}\n </a>\n </MDBBreadcrumbItem>\n ) : (\n <MDBBreadcrumbItem active key={index}>\n {e.name}\n </MDBBreadcrumbItem>\n )\n )}\n </MDBBreadcrumb>\n );\n};\n//#endregion\n\n//#region > Exports\nexport default Breadcrumbs;\n//#endregion\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/atoms/Mailto/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/Login/index.tsx",["153"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { useState } from \"react\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBContainer,\n MDBRow,\n MDBCol,\n MDBBtn,\n MDBCard,\n MDBCardBody,\n MDBInput,\n} from \"mdbreact\";\n\n//> Mailing\nimport Mailto from \"../../atoms/Mailto\";\n//> Stylesheet\nimport \"./login.scss\";\n//#endregion\n\n//#region > Components\nconst LoginForm = (props: {\n onSubmit: (username: string, password: string) => void;\n}) => {\n const [username, setUsername] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n return (\n <div>\n <MDBContainer>\n <MDBRow className=\"justify-content-center\">\n <MDBCol md=\"6\">\n <MDBCard>\n <MDBCardBody className=\"mx-4 mt-4\">\n <MDBInput\n id=\"input\"\n className=\"input-login\"\n label=\"Your username\"\n group\n type=\"text\"\n validate\n value={username}\n onChange={(e: any) => setUsername(e.target.value)}\n />\n <MDBInput\n className=\"input-login\"\n label=\"Your password\"\n group\n type=\"password\"\n validate\n containerClass=\"mb-0\"\n value={password}\n onChange={(e: any) => setPassword(e.target.value)}\n />\n <p className=\"font-small grey-text d-flex justify-content-end\">\n Forgot\n <a\n onClick={() => alert(\"Shit happens ¯\\\\_(ツ)_/¯\")}\n className=\"dark-grey-text font-weight-bold ml-1\"\n >\n Password?\n </a>\n </p>\n <div className=\"text-center mb-4 mt-5\">\n <MDBBtn\n color=\"light-green\"\n type=\"button\"\n className=\"btn-block z-depth-2 btn-primary\"\n onClick={() => props.onSubmit(username, password)}\n >\n Log in\n </MDBBtn>\n </div>\n <p className=\"font-small grey-text d-flex justify-content-center\">\n Don't have an account?\n <Mailto\n email=\"[email protected]\"\n subject=\"Hello & Welcome\"\n body=\"Hello world!\"\n className=\"dark-grey-text font-weight-bold ml-1\"\n >\n {\" \"}\n Contact a supervisor\n </Mailto>\n </p>\n </MDBCardBody>\n </MDBCard>\n </MDBCol>\n </MDBRow>\n </MDBContainer>\n </div>\n );\n};\n//#endregion\n\n//#region > Exports\nexport default LoginForm;\n//#endregion\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/ServiceGroup/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/ProjectTable/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/TrackTable/index.tsx",["154"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBDataTableV5,\n MDBIcon,\n MDBBadge,\n MDBChip,\n MDBBtn,\n MDBRow,\n MDBCol,\n} from \"mdbreact\";\n//> Audio Player\nimport ReactPlayer from \"react-player\";\n//> Moment\nimport moment from \"moment\";\n\n//> Store Types\nimport { Track } from \"../../../../store/types\";\n//#endregion\n\n//#region > Compnents\nclass TrackTable extends React.Component<\n {\n entries: Track[];\n onTranscriptClick: (track: Track) => void;\n onDeleteClick: (track: Track) => void;\n onEditClick: (track: Track) => void;\n },\n {}\n> {\n generateRows = () => {\n return this.props.entries.map((e) => {\n console.log(e);\n const {\n id,\n title,\n createdAt,\n tags,\n attendees,\n transcript,\n audioFileUrl,\n } = e;\n return {\n id,\n name: title,\n createdAt: moment(createdAt).calendar(),\n tags: (\n <>\n {tags?.map((tag) => (\n <MDBBadge\n pill\n color={tag.significance ? tag.significance : \"light\"}\n className=\"m-1 shadow-none\"\n >\n <p className=\"mx-2 my-2\">{tag.name}</p>\n </MDBBadge>\n ))}\n </>\n ),\n attendees: (\n <>\n {attendees?.map((attendee) => (\n <MDBChip className=\"m-1\">{attendee.name}</MDBChip>\n ))}\n </>\n ),\n transcript: (\n <MDBBtn\n rounded\n outline\n color=\"primary\"\n onClick={() => this.props.onTranscriptClick(e)}\n >\n <MDBIcon icon=\"file\" /> Open\n </MDBBtn>\n ),\n audio: (\n <ReactPlayer\n url={audioFileUrl}\n width=\"100px\"\n height=\"50px\"\n playing={false}\n controls={true}\n />\n ),\n actions: (\n <MDBRow>\n <MDBCol size=\"2\">\n <MDBIcon\n icon=\"pencil-alt\"\n size=\"lg\"\n onClick={() => this.props.onEditClick(e)}\n />\n </MDBCol>\n <MDBCol size=\"2\">\n <MDBIcon\n icon=\"trash-alt\"\n size=\"lg\"\n onClick={() => this.props.onDeleteClick(e)}\n />\n </MDBCol>\n </MDBRow>\n ),\n };\n });\n };\n\n state = {\n columns: [\n {\n label: \"Name\",\n field: \"name\",\n width: 300,\n attributes: {\n \"aria-controls\": \"DataTable\",\n \"aria-label\": \"Name\",\n },\n },\n {\n label: \"Created date\",\n field: \"createdAt\",\n width: 300,\n },\n {\n label: \"Tags\",\n field: \"tags\",\n width: 300,\n },\n {\n label: \"Attendees\",\n field: \"attendees\",\n width: 300,\n },\n {\n label: \"Transcript\",\n field: \"transcript\",\n width: 300,\n sort: \"disabled\",\n },\n {\n label: \"Audio\",\n field: \"audio\",\n width: 300,\n sort: \"disabled\",\n },\n {\n label: \"Actions\",\n field: \"actions\",\n width: 300,\n sort: \"disabled\",\n },\n ],\n rows: this.generateRows(),\n };\n\n componentDidUpdate(prevProps: any, prevState: any) {\n console.log(prevProps, this.props);\n if (prevProps !== this.props) {\n this.setState({ rows: this.generateRows() });\n }\n }\n\n render() {\n return (\n <MDBDataTableV5\n hover\n scrollY\n searching={false}\n maxHeight=\"300px\"\n data={this.state}\n />\n );\n }\n}\n//#endregion\n\n//#region > Exports\nexport default TrackTable;\n//#endregion\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/Navbar/index.tsx",["155"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBNavbar,\n MDBNavbarBrand,\n MDBNavbarNav,\n MDBNavItem,\n MDBNavbarToggler,\n MDBCollapse,\n MDBDropdown,\n MDBDropdownToggle,\n MDBDropdownMenu,\n MDBDropdownItem,\n MDBIcon,\n} from \"mdbreact\";\n//> Redux\nimport { connect } from \"react-redux\";\n\n//> Store Actions\nimport { RootState } from \"../../../store/reducers/index\";\nimport { logoutAction } from \"../../../store/actions/userActions\";\n//> Style Sheet\nimport \"./indes.scss\";\n//> Logo\nimport logo from \"../../../assets/logo.png\";\n\n//#region > Interfaces\ninterface State {\n isOpen: boolean;\n}\ninterface OwnProps {}\ninterface StateProps {}\ninterface DispatchProps {\n logout: () => void;\n}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n//#endregion\n\n//#region > Components\nclass Navbar extends React.Component<Props, State> {\n state: State = {\n isOpen: false,\n };\n\n toggleCollapse = () => {\n this.setState({ isOpen: !this.state.isOpen });\n };\n\n async logout() {\n this.props.logout();\n\n this.props.history.push(\"/login\");\n }\n\n render() {\n return (\n <MDBNavbar color=\"default-color\" dark expand=\"md\">\n <MDBNavbarBrand>\n <>\n <img src={logo}></img>\n </>\n </MDBNavbarBrand>\n <MDBNavbarToggler onClick={this.toggleCollapse} />\n <MDBCollapse id=\"navbarCollapse3\" isOpen={this.state.isOpen} navbar>\n <MDBNavbarNav right>\n <MDBNavItem>\n <MDBDropdown>\n <MDBDropdownToggle nav caret>\n <MDBIcon icon=\"user\" />\n </MDBDropdownToggle>\n <MDBDropdownMenu right>\n <MDBDropdownItem href=\"#\" onClick={() => this.logout()}>\n Logout\n </MDBDropdownItem>\n </MDBDropdownMenu>\n </MDBDropdown>\n </MDBNavItem>\n </MDBNavbarNav>\n </MDBCollapse>\n </MDBNavbar>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({});\n\nconst mapDispatchToProps = {\n logout: logoutAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Navbar));\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/services/ohrwurm/index.tsx",["156","157","158","159"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBContainer,\n MDBIcon,\n MDBInput,\n MDBModal,\n MDBModalBody,\n MDBModalFooter,\n MDBModalHeader,\n MDBRow,\n MDBCol,\n MDBBtn,\n} from \"mdbreact\";\n//> Redux\nimport { connect } from \"react-redux\";\n// Contains the functionality for uploading a file\nimport Dropzone from \"react-dropzone\";\n\n//> Store Types\nimport { RootState } from \"../../../../store/reducers/index\";\nimport { OhrwurmState, Track } from \"../../../../store/types\";\n//> Store Actions\nimport {\n fetchPACSAction,\n fetchPACTracksAction,\n} from \"../../../../store/actions/ohrwurmActions\";\n//> Components\nimport { Breadcrumbs } from \"../../../atoms\";\nimport { ProjectTable, TrackTable } from \"../../../molecules\";\nimport { ProjectModal, TrackModal } from \"../../modals\";\n//> Style Sheet\nimport \"./ohrwurm.scss\";\n//#endregion\n\n//#region > Types\ntype TableType = \"PROJECT\" | \"TRACK\";\n//#endregion\n\n//#region > Interfaces\ninterface State {\n activeTable: TableType;\n showTranscriptModal: boolean;\n transcriptTitle: string;\n transcriptText: string;\n searchQuery?: string;\n selectedProjectIndex?: number;\n editingProject: boolean;\n projectModal: boolean;\n trackModal: boolean;\n selectedTrack: Track | undefined;\n error: Array<any>;\n files: any;\n}\ninterface OwnProps {}\ninterface StateProps {\n ohrwurm: OhrwurmState;\n}\ninterface DispatchProps {\n // login: (user?: { username: string; password: string }) => void;\n fetchPACS: (searchQuery?: string) => void;\n fetchPACTracks: (pacId: number, searchQuery?: string) => void;\n}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n//#endregion\n\n//#region > Functions\nconst truncate = (input: string) =>\n input.length > 5 ? `${input.substring(0, 25)}...` : input;\n//#endregion\n\n//#region > Components\nclass Ohrwurm extends React.Component<Props, State> {\n state: State = {\n activeTable: \"PROJECT\",\n showTranscriptModal: false,\n transcriptTitle: \"\",\n transcriptText: \"\",\n editingProject: false,\n projectModal: false,\n trackModal: false,\n selectedTrack: undefined,\n error: [],\n files: null,\n };\n\n componentDidMount = () => {\n console.log(\"MOUNT\");\n this.props.fetchPACS();\n };\n\n switchTable = (table: TableType) => {\n console.log(table);\n this.setState({ activeTable: table });\n };\n\n selectProject = (index: number) => {\n console.log(this.state.editingProject, \"XXXXXXXXXXXXXXXXXXX\");\n if (!this.state.editingProject) {\n this.props.fetchPACTracks(index);\n this.setState({ selectedProjectIndex: index, searchQuery: \"\" });\n this.switchTable(\"TRACK\");\n } else {\n this.setState({ editingProject: false });\n }\n };\n\n deleteProject = (index: number) => {\n this.setState({ selectedProjectIndex: index });\n this.state.editingProject = true;\n };\n\n editProject = (index: number) => {\n this.setState({ selectedProjectIndex: index });\n this.state.editingProject = true;\n };\n\n selectTrack = (track: Track) => {\n this.setState({\n transcriptTitle: track.title,\n transcriptText: track.transcript,\n });\n this.toggleTranscriptModal();\n };\n\n toggleTranscriptModal = () => {\n this.setState({\n showTranscriptModal: !this.state.showTranscriptModal,\n });\n };\n\n search = (value: string) => {\n this.setState({ searchQuery: value });\n\n if (this.state.activeTable === \"TRACK\" && this.state.selectedProjectIndex) {\n this.props.fetchPACTracks(this.state.selectedProjectIndex, value);\n }\n\n if (this.state.activeTable === \"PROJECT\") {\n this.props.fetchPACS(value);\n }\n };\n\n toggleProjectModal = () => {\n this.setState({\n projectModal: !this.state.projectModal,\n });\n };\n\n toggleTrackModal = () => {\n this.setState({\n trackModal: !this.state.trackModal,\n });\n if (this.state.trackModal) {\n this.setState({ selectedTrack: undefined });\n }\n };\n\n deleteTrack = (track: Track) => {\n console.log(track);\n };\n\n editTrack = (track: Track) => {\n this.setState({\n selectedTrack: track,\n });\n this.toggleTrackModal();\n };\n\n onDrop = async (files: any) => {\n if (files.length > 0) {\n this.setState({\n files,\n error: [],\n });\n\n this.toggleTrackModal();\n } else {\n this.setState({\n error: [\"Only sound related file uploading is supported!\"],\n });\n }\n };\n\n render() {\n const activeStyle = {\n borderColor: \"#2196f3\",\n };\n return (\n <>\n {this.state.activeTable === \"PROJECT\" ? (\n <Breadcrumbs\n crumbs={[\n { name: \"Ohrwurm\" },\n {\n name: \"Projects\",\n active: true,\n },\n ]}\n ></Breadcrumbs>\n ) : (\n <Breadcrumbs\n crumbs={[\n { name: \"Ohrwurm\" },\n {\n name: \"Project\",\n onClick: () => this.switchTable(\"PROJECT\"),\n },\n {\n name: \"Track\",\n active: true,\n },\n ]}\n ></Breadcrumbs>\n )}\n <MDBRow>\n <MDBCol size=\"11\">\n <MDBInput\n hint=\"Search\"\n type=\"text\"\n value={this.state.searchQuery}\n containerClass=\"active-pink active-pink-2 mt-0 mb-3\"\n onChange={(e: any) => this.search(e.target.value)}\n />\n </MDBCol>\n <MDBCol size=\"1\">\n {this.state.activeTable === \"PROJECT\" ? (\n <MDBBtn flat onClick={() => this.toggleProjectModal()}>\n <MDBIcon icon=\"plus\" size=\"lg\" className=\"blue-text\" />\n </MDBBtn>\n ) : (\n <MDBBtn flat onClick={() => this.toggleTrackModal()}>\n <MDBIcon icon=\"upload\" size=\"lg\" className=\"blue-text\" />\n </MDBBtn>\n )}\n </MDBCol>\n </MDBRow>\n\n <MDBContainer>\n <MDBModal\n isOpen={this.state.showTranscriptModal}\n toggle={this.toggleTranscriptModal}\n fullHeight\n position=\"left\"\n >\n <MDBModalHeader toggle={this.toggleTranscriptModal}>\n <div className=\"row\">\n <span className=\"dark-grey-text font-medium ml-3\">\n {truncate(this.state.transcriptTitle)}\n </span>\n </div>\n <a className=\"dark-grey-text font-small font-weight-bold ml-1\">\n Transcript\n </a>\n </MDBModalHeader>\n <MDBModalBody className=\"modal-body\">\n {this.state.transcriptText}\n </MDBModalBody>\n <MDBModalFooter>\n <MDBIcon icon=\"snowman\" />\n </MDBModalFooter>\n </MDBModal>\n </MDBContainer>\n {this.state.activeTable === \"PROJECT\" ? (\n <ProjectTable\n entries={\n this.props.ohrwurm.pacs?.items\n ? this.props.ohrwurm.pacs.items\n : []\n }\n onClick={this.selectProject}\n onDeleteClick={this.deleteProject}\n onEditClick={this.editProject}\n ></ProjectTable>\n ) : (\n <>\n <ul className=\"list-group mt-2\">\n {this.state.error.length > 0 &&\n this.state.error.map((error, i) => (\n <li\n className=\"list-group-item list-group-item-danger\"\n key={i}\n >\n <h3>{error}</h3>\n </li>\n ))}\n </ul>\n <Dropzone\n onDrop={this.onDrop}\n accept=\"audio/*\"\n noClick\n multiple={false}\n >\n {({ getRootProps, getInputProps, acceptedFiles }) => (\n <div {...getRootProps()}>\n <input {...getInputProps()} />\n <TrackTable\n entries={\n this.props.ohrwurm.tracks?.items\n ? this.props.ohrwurm.tracks.items\n : []\n }\n onTranscriptClick={this.selectTrack}\n onDeleteClick={this.deleteTrack}\n onEditClick={this.editTrack}\n ></TrackTable>\n </div>\n )}\n </Dropzone>\n </>\n )}\n {this.state.projectModal && (\n <ProjectModal toggle={this.toggleProjectModal} />\n )}\n {this.state.trackModal && (\n <TrackModal\n files={this.state.files}\n toggle={this.toggleTrackModal}\n track={this.state.selectedTrack}\n />\n )}\n </>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ ohrwurm: state.ohrwurm });\n\nconst mapDispatchToProps = {\n fetchPACS: fetchPACSAction,\n fetchPACTracks: fetchPACTracksAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(Ohrwurm)\n);\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/store/actions/ohrwurmActions.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/index.ts",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/PasswordChangePage/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/PasswordChange/index.tsx",["160"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { useState } from \"react\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBContainer,\n MDBRow,\n MDBCol,\n MDBBtn,\n MDBCard,\n MDBCardBody,\n MDBInput,\n} from \"mdbreact\";\n//#endregion\n\n//#region > Components\n\nclass PasswordChangeForm extends React.Component<\n {\n username: string | undefined;\n onSubmit: (newPassword: string) => void;\n },\n {}\n> {\n state = {\n password: \"\",\n confirmPassword: \"\",\n };\n\n validPassword = () => {\n return (\n this.state.password !== \"\" &&\n this.state.confirmPassword !== \"\" &&\n this.state.password === this.state.confirmPassword\n );\n };\n\n submitHandler = (event: any) => {\n event.preventDefault();\n event.target.className += \" was-validated\";\n\n if (this.validPassword()) {\n this.props.onSubmit(this.state.password);\n }\n };\n\n changeHandler = (event: any) => {\n this.setState({ [event.target.name]: event.target.value });\n };\n\n render() {\n return (\n <div>\n <form\n className=\"needs-validation\"\n onSubmit={this.submitHandler}\n noValidate\n >\n <MDBContainer>\n <MDBRow className=\"justify-content-center\">\n <MDBCol md=\"6\">\n <MDBCard>\n <MDBCardBody className=\"mx-4 mt-4\">\n <p className=\"font-small grey-text d-flex justify-content-center\">\n Enter a new password for the user\n <p className=\"dark-grey-text font-weight-bold ml-1\">\n {this.props.username}\n </p>\n .\n </p>\n <MDBInput\n value={this.state.password}\n name=\"password\"\n onChange={this.changeHandler}\n type=\"password\"\n id=\"materialFormRegisterPasswordEx3\"\n label=\"New password\"\n required\n >\n <div className=\"invalid-feedback\">\n Please enter a valid password.\n </div>\n <div className=\"valid-feedback\">Looks good!</div>\n </MDBInput>\n <MDBInput\n value={this.state.confirmPassword}\n name=\"confirmPassword\"\n onChange={this.changeHandler}\n type=\"password\"\n id=\"materialFormRegisterPasswordEx4\"\n label=\"Confirm new password\"\n required\n >\n <div className=\"invalid-feedback\">\n Please enter a valid password.\n </div>\n <div className=\"valid-feedback\">Looks good!</div>\n </MDBInput>\n {(this.state.password === \"\" &&\n this.state.confirmPassword === \"\") ||\n this.validPassword() ? (\n <></>\n ) : (\n <small className=\"text-danger\">\n The passwords entered do not match.\n </small>\n )}\n <div className=\"text-center mb-4 mt-5\">\n <MDBBtn\n color=\"light-green\"\n type=\"submit\"\n className=\"btn-block z-depth-2 btn-primary\"\n >\n Change password\n </MDBBtn>\n </div>\n </MDBCardBody>\n </MDBCard>\n </MDBCol>\n </MDBRow>\n </MDBContainer>\n </form>\n </div>\n );\n }\n}\n\nexport default PasswordChangeForm;\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/molecules/tables/MemberTable/index.tsx",["161"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport { MDBDataTableV5, MDBRow, MDBCol, MDBIcon } from \"mdbreact\";\n\n//> Store Types\nimport { PAC } from \"../../../../store/types\";\n//#endregion\n\n//#region > Components\nclass MemberTable extends React.Component<\n {\n members: [];\n onDeleteClick: (index: number) => void;\n onEditClick: (index: number) => void;\n },\n {}\n> {\n generateRows = () => {\n return this.props.members.map((e) => {\n const { id, title } = e;\n\n return {\n id,\n name: title,\n actions: (\n <MDBRow>\n <MDBCol size=\"2\">\n <MDBIcon\n icon=\"pencil-alt\"\n size=\"lg\"\n onClick={() => this.props.onEditClick(e)}\n />\n </MDBCol>\n <MDBCol size=\"2\">\n <MDBIcon\n icon=\"trash-alt\"\n size=\"lg\"\n onClick={() => this.props.onDeleteClick(e)}\n />\n </MDBCol>\n </MDBRow>\n ),\n };\n });\n };\n\n state = {\n columns: [\n {\n label: \"Name\",\n field: \"name\",\n width: 300,\n attributes: {\n \"aria-controls\": \"DataTable\",\n \"aria-label\": \"Name\",\n },\n },\n {\n label: \"Actions\",\n field: \"actions\",\n width: 300,\n sort: \"disabled\",\n },\n ],\n rows: this.generateRows(),\n };\n\n componentDidUpdate(prevProps: any, prevState: any) {\n if (prevProps !== this.props) {\n this.setState({ rows: this.generateRows() });\n }\n }\n\n render() {\n return (\n <MDBDataTableV5\n hover\n scrollY\n searching={false}\n maxHeight=\"300px\"\n data={this.state}\n />\n );\n }\n}\n//#endregion\n\n//#region > Exports\nexport default MemberTable;\n//#endregion\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/MemberModal/index.tsx",["162","163","164"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { FormEvent } from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBModal,\n MDBModalBody,\n MDBRow,\n MDBCol,\n MDBInput,\n MDBBtn,\n MDBListGroup,\n MDBListGroupItem,\n} from \"mdbreact\";\n//> Redux\nimport { connect } from \"react-redux\";\n\n//> Store Types\nimport { RootState } from \"../../../../store/reducers/index\";\nimport { OhrwurmState, Track } from \"../../../../store/types\";\n//> Store Actions\nimport {\n fetchPACSAction,\n fetchPACTracksAction,\n} from \"../../../../store/actions/ohrwurmActions\";\n//> Style Sheet\nimport \"./membermodal.scss\";\n//#endregion\n\n//#region > Interfaces\ninterface State {\n name: string;\n searchQuery?: string;\n}\ninterface OwnProps {}\ninterface StateProps {\n ohrwurm: OhrwurmState;\n toggle: any;\n}\ninterface DispatchProps {\n // login: (user?: { username: string; password: string }) => void;\n fetchPACS: (searchQuery?: string) => void;\n fetchPACTracks: (pacId: number, searchQuery?: string) => void;\n}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n//#endregion\n\n//#region > Functions\nconst truncate = (input: string) =>\n input.length > 5 ? `${input.substring(0, 25)}...` : input;\n//#endregion\n\n//#region > Components\nclass MemberModal extends React.Component<Props, State> {\n state: State = {\n name: \"name\",\n searchQuery: \"\",\n };\n\n setProjectName = (e: React.FormEvent<HTMLInputElement>): void => {\n this.setState({ name: e.currentTarget.value });\n };\n\n search = (value: string) => {\n this.setState({ searchQuery: value });\n\n // Add search for users\n };\n\n render() {\n return (\n <MDBModal\n isOpen={true}\n toggle={this.props.toggle}\n size=\"lg\"\n id=\"membermodal\"\n >\n <MDBModalBody>\n <MDBRow>\n <MDBCol>\n <MDBInput\n id=\"input\"\n className=\"input-track\"\n label=\"Username\"\n group\n type=\"text\"\n validate\n value={this.state.name}\n onChange={(e: React.FormEvent<HTMLInputElement>) =>\n this.setProjectName(e)\n }\n />\n\n <label>Projects</label>\n <div className=\"rounded mb-0 border border-light\">\n <div className=\"mb-0\">\n <MDBInput\n hint=\"Search\"\n type=\"text\"\n value={this.state.searchQuery}\n containerClass=\"active-pink active-pink-2 mt-0 mb-3\"\n onChange={(e: any) => this.search(e.target.value)}\n />\n </div>\n <MDBListGroup>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox1\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox3\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox2\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput type=\"checkbox\" id=\"checkbox4\" label=\"Hugo\" />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox5\"\n label=\"TESTTSTST\"\n />\n </MDBListGroupItem>\n </MDBListGroup>\n </div>\n <div className=\"text-right mb-4 mt-5\">\n <MDBBtn\n rounded\n color=\"light-green\"\n type=\"button\"\n className=\"z-depth-2 btn-primary\"\n onClick={() => alert()}\n >\n Save\n </MDBBtn>\n </div>\n </MDBCol>\n </MDBRow>\n </MDBModalBody>\n </MDBModal>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ ohrwurm: state.ohrwurm });\n\nconst mapDispatchToProps = {\n fetchPACS: fetchPACSAction,\n fetchPACTracks: fetchPACTracksAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(MemberModal)\n);\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/ProjectModal/index.tsx",["165","166","167"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { FormEvent } from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBModal,\n MDBModalBody,\n MDBRow,\n MDBCol,\n MDBInput,\n MDBBtn,\n MDBListGroup,\n MDBListGroupItem,\n} from \"mdbreact\";\n//> Redux\nimport { connect } from \"react-redux\";\n\n//> Store Types\nimport { RootState } from \"../../../../store/reducers/index\";\nimport { OhrwurmState, Track } from \"../../../../store/types\";\n//> Store Actions\nimport {\n fetchPACSAction,\n fetchPACTracksAction,\n} from \"../../../../store/actions/ohrwurmActions\";\n//> Style Sheet\nimport \"./projectmodal.scss\";\n//#endregion\n\n//#region > Interfaces\ninterface State {\n projectName: string;\n description: string;\n searchQuery?: string;\n}\ninterface OwnProps {}\ninterface StateProps {\n ohrwurm: OhrwurmState;\n toggle: any;\n}\ninterface DispatchProps {\n // login: (user?: { username: string; password: string }) => void;\n fetchPACS: (searchQuery?: string) => void;\n fetchPACTracks: (pacId: number, searchQuery?: string) => void;\n}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n//#endregion\n\n//#region > Functions\nconst truncate = (input: string) =>\n input.length > 5 ? `${input.substring(0, 25)}...` : input;\n//#endregion\n\n//#region > Components\nclass ProjectModal extends React.Component<Props, State> {\n state: State = {\n projectName: \"Test project name\",\n description: \"This is a description for a project!!!\",\n searchQuery: \"\",\n };\n\n setProjectName = (e: React.FormEvent<HTMLInputElement>): void => {\n this.setState({ projectName: e.currentTarget.value });\n };\n\n setDescription = (e: React.FormEvent<HTMLInputElement>): void => {\n this.setState({ description: e.currentTarget.value });\n };\n\n search = (value: string) => {\n this.setState({ searchQuery: value });\n\n // Add search for users\n };\n\n render() {\n return (\n <MDBModal\n isOpen={true}\n toggle={this.props.toggle}\n size=\"lg\"\n id=\"projectmodal\"\n >\n <MDBModalBody>\n <MDBRow>\n <MDBCol>\n <MDBInput\n id=\"input\"\n className=\"input-track\"\n label=\"Project name\"\n group\n type=\"text\"\n validate\n value={this.state.projectName}\n onChange={(e: React.FormEvent<HTMLInputElement>) =>\n this.setProjectName(e)\n }\n />\n <MDBInput\n id=\"input\"\n className=\"input-track\"\n label=\"Description\"\n group\n type=\"textarea\"\n validate\n value={this.state.description}\n onChange={(e: React.FormEvent<HTMLInputElement>) =>\n this.setDescription(e)\n }\n />\n\n <label>Member</label>\n <div className=\"rounded mb-0 border border-light\">\n <div className=\"mb-0\">\n <MDBInput\n hint=\"Search\"\n type=\"text\"\n value={this.state.searchQuery}\n containerClass=\"active-pink active-pink-2 mt-0 mb-3\"\n onChange={(e: any) => this.search(e.target.value)}\n />\n </div>\n <MDBListGroup>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox1\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox3\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox2\"\n label=\"David Pinterics\"\n />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput type=\"checkbox\" id=\"checkbox4\" label=\"Hugo\" />\n </MDBListGroupItem>\n <MDBListGroupItem>\n <MDBInput\n type=\"checkbox\"\n id=\"checkbox5\"\n label=\"TESTTSTST\"\n />\n </MDBListGroupItem>\n </MDBListGroup>\n </div>\n <div className=\"text-right mb-4 mt-5\">\n <MDBBtn\n rounded\n color=\"light-green\"\n type=\"button\"\n className=\"z-depth-2 btn-primary\"\n onClick={() => alert()}\n >\n Save\n </MDBBtn>\n </div>\n </MDBCol>\n </MDBRow>\n </MDBModalBody>\n </MDBModal>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ ohrwurm: state.ohrwurm });\n\nconst mapDispatchToProps = {\n fetchPACS: fetchPACSAction,\n fetchPACTracks: fetchPACTracksAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ProjectModal)\n);\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/organisms/modals/TrackModal/index.tsx",["168","169","170"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React, { FormEvent } from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBModal,\n MDBModalBody,\n MDBRow,\n MDBCol,\n MDBInput,\n MDBBtn,\n MDBIcon,\n MDBProgress,\n} from \"mdbreact\";\n//> Redux\nimport { connect } from \"react-redux\";\n// Contains the functionality for uploading a file\nimport Dropzone from \"react-dropzone\";\n// Contains the functionality for tag inputs\nimport { TagInput } from \"reactjs-tag-input\";\n//import { Tag } from \"react-tag-input\";\nimport ReactTagInput from \"@snek-shipyard/react-tag-input\";\n//> Store Types\nimport { RootState } from \"../../../../store/reducers/index\";\nimport { OhrwurmState, Track, Significance } from \"../../../../store/types\";\n//> Store Actions\nimport {\n fetchPACSAction,\n fetchPACTracksAction,\n} from \"../../../../store/actions/ohrwurmActions\";\n\n//> Style Sheet\nimport \"./trackmodal.scss\";\n//#endregion\n\n//#region > Types\ntype TagType = { name: string; significance: Significance };\ntype Tags = TagType[];\n//#endregion\n\n//#region > Interfaces\ninterface State {\n loading: boolean;\n error: Array<any>;\n attendees: Tags;\n tags: Tags;\n trackName: string;\n date: Date;\n files: any;\n}\ninterface OwnProps {}\ninterface StateProps {\n ohrwurm: OhrwurmState;\n toggle: any;\n track: Track | undefined;\n files: any;\n}\ninterface DispatchProps {\n // login: (user?: { username: string; password: string }) => void;\n fetchPACS: (searchQuery?: string) => void;\n fetchPACTracks: (pacId: number, searchQuery?: string) => void;\n}\ninterface Props\n extends OwnProps,\n StateProps,\n DispatchProps,\n RouteComponentProps {}\n//#endregion\n\n//#region > Functions\nconst truncate = (input: string) =>\n input.length > 5 ? `${input.substring(0, 25)}...` : input;\n//#endregion\n\n//#region > Constant Variables\nconst KeyCodes = {\n comma: 188,\n enter: 13,\n};\n\nconst delimiters = [KeyCodes.comma, KeyCodes.enter];\n//#endregion\n\n//#region > Components\nclass TrackModal extends React.Component<Props, State> {\n state: State = {\n loading: false,\n error: [],\n attendees: [],\n tags: [],\n trackName: \"\",\n date: new Date(),\n files: null,\n };\n\n componentWillMount = () => {\n if (this.props.track) {\n const track = this.props.track;\n\n this.setState({\n attendees: track.attendees.map((attendee) => {\n return { name: attendee.name, significance: \"LIGHT\" };\n }),\n tags: track.tags,\n trackName: track.title,\n date: new Date(track.createdAt),\n files: track.audioFileUrl,\n });\n }\n\n if (this.props.files) {\n this.setState({\n files: this.props.files,\n });\n }\n };\n\n setTrackName = (e: React.FormEvent<HTMLInputElement>): void => {\n this.setState({ trackName: e.currentTarget.value });\n };\n\n setDate = (e: React.FormEvent<HTMLInputElement>): void => {\n this.setState({ date: new Date(e.currentTarget.value) });\n };\n\n getDisplayDate = (date: Date) => {\n let dateString: string = \"\";\n date\n .toLocaleDateString()\n .split(\"/\")\n .reverse()\n .map((part: string) => {\n if (part.length < 2) {\n part = \"0\" + part;\n }\n dateString += part + \"-\";\n });\n return dateString.slice(0, -1);\n };\n\n onDrop = async (files: any) => {\n this.setState({ files });\n };\n\n render() {\n return (\n <MDBModal isOpen={true} toggle={this.props.toggle} size=\"lg\">\n <MDBModalBody>\n <MDBRow>\n <MDBCol>\n <MDBInput\n id=\"input\"\n className=\"input-track\"\n label=\"Track name\"\n group\n type=\"text\"\n validate\n value={this.state.trackName}\n onChange={(e: React.FormEvent<HTMLInputElement>) =>\n this.setTrackName(e)\n }\n />\n <MDBInput\n id=\"input\"\n className=\"input-track\"\n label=\"Date\"\n group\n type=\"date\"\n validate\n value={this.getDisplayDate(this.state.date)}\n onChange={(e: React.FormEvent<HTMLInputElement>) =>\n this.setDate(e)\n }\n />\n <Dropzone onDrop={this.onDrop} accept=\"audio/*\">\n {({ getRootProps, getInputProps, acceptedFiles }) => (\n <div {...getRootProps()}>\n <input {...getInputProps()} />\n {this.state.error.length > 0 || acceptedFiles.length > 0 ? (\n <div className=\"text-center\">\n <ul className=\"list-group mt-2\">\n {acceptedFiles.length > 0 &&\n acceptedFiles.map((acceptedFile, i) => (\n <li\n className=\"list-group-item list-group-item-success\"\n key={i}\n >\n <MDBIcon\n icon=\"cloud-upload-alt\"\n className=\"green-text\"\n size=\"3x\"\n />\n <p className=\"lead mt-3 mb-0\">\n {acceptedFile.name}\n </p>\n </li>\n ))}\n </ul>\n {this.state.loading && (\n <MDBProgress\n material\n value={100}\n animated\n height=\"25px\"\n color=\"success\"\n className=\"mb-0 pb-0\"\n >\n Uploading file\n </MDBProgress>\n )}\n <ul className=\"list-group mt-2\">\n {this.state.error.length > 0 &&\n this.state.error.map((error, i) => (\n <li\n className=\"list-group-item list-group-item-danger\"\n key={i}\n >\n <MDBIcon\n icon=\"times\"\n className=\"danger-text\"\n size=\"6x\"\n />\n <p />\n <h3>{error}</h3>\n </li>\n ))}\n </ul>\n </div>\n ) : (\n <div className=\"border rounded px-4 pt-4 pb-3 clickable text-center\">\n <MDBIcon\n icon=\"cloud-upload-alt\"\n className=\"green-text\"\n size=\"3x\"\n />\n <p className=\"lead mt-3 mb-0\">\n Click here or drop a file to upload!\n </p>\n </div>\n )}\n </div>\n )}\n </Dropzone>\n <br />\n <label>Attendees</label>\n <span id=\"attendees\">\n <ReactTagInput\n tags={this.state.attendees}\n onChange={(attendees: Tags) => this.setState({ attendees })}\n placeholder=\"Type and press enter\"\n editable={true}\n readOnly={false}\n />\n </span>\n <br />\n <label>Tags</label>\n <span id=\"tags\">\n <ReactTagInput\n tags={this.state.tags}\n onChange={(tags: Tags) => this.setState({ tags })}\n placeholder=\"Type and press enter\"\n editable={true}\n readOnly={false}\n />\n </span>\n <div className=\"text-center mb-4 mt-5\">\n <MDBBtn\n color=\"light-green\"\n type=\"button\"\n className=\"btn-block z-depth-2 btn-primary\"\n onClick={() => alert()}\n >\n Save\n </MDBBtn>\n </div>\n </MDBCol>\n </MDBRow>\n </MDBModalBody>\n </MDBModal>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ ohrwurm: state.ohrwurm });\n\nconst mapDispatchToProps = {\n fetchPACS: fetchPACSAction,\n fetchPACTracks: fetchPACTracksAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(TrackModal)\n);\n//#endregion\n\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n","/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/ohrwurm/index.tsx",[],"/Volumes/DATA/GIT/snek-shipyard/watch/src/components/pages/ohrwurm/MemberPage/index.tsx",["171","172","173"],"//#region > Imports\n//> React\n// Contains all the functionality necessary to define React components\nimport React from \"react\";\n// DOM bindings for React Router\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\n//> Redux\nimport { connect } from \"react-redux\";\n//> MDB\n// \"Material Design for Bootstrap\" is a great UI design framework\nimport {\n MDBContainer,\n MDBCol,\n MDBRow,\n MDBInput,\n MDBBtn,\n MDBIcon,\n} from \"mdbreact\";\n\n//> Store Types\nimport { RootState } from \"../../../../store/reducers/index\";\nimport { UserState } from \"../../../../store/types\";\n//> Store Actions\nimport { loginAction } from \"../../../../store/actions/userActions\";\n//> Service Registry\nimport Services from \"../../../../serviceRegistry.json\";\n//> Components\nimport { Breadcrumbs } from \"../../../atoms\";\nimport { LoginForm, ServiceGroup, MemberTable } from \"../../../molecules\";\nimport { MemberModal } from \"../../../organisms/modals\";\n//#endregion\n\n//#region > Interfaces\ninterface State {\n searchQuery: string;\n memberModal: boolean;\n}\ninterface OwnProps {}\ninterface StateProps {\n user: UserState;\n}\ninterface Props extends OwnProps, StateProps, RouteComponentProps {}\n//#endregion\n\n//#region > Components\n/** @class This component displays the login page */\nclass MemberPage extends React.Component<Props, State> {\n state: State = {\n searchQuery: \"\",\n memberModal: false,\n };\n\n deleteUser = () => {\n alert();\n };\n\n editUser = () => {\n alert();\n };\n\n search = (value: string) => {\n this.setState({ searchQuery: value });\n\n // Add search for users\n };\n\n toggleMemberModal = () => {\n this.setState({\n memberModal: !this.state.memberModal,\n });\n };\n\n render() {\n return (\n <>\n <MDBContainer>\n <Breadcrumbs\n crumbs={[\n {\n name: \"Ohrwurm\",\n // onClick: () => this.switchForm(\"SERVICE\"),\n },\n {\n name: \"Members management\",\n active: true,\n },\n ]}\n ></Breadcrumbs>\n <MDBRow>\n <MDBCol size=\"11\">\n <MDBInput\n hint=\"Search\"\n type=\"text\"\n value={this.state.searchQuery}\n containerClass=\"active-pink active-pink-2 mt-0 mb-3\"\n onChange={(e: any) => this.search(e.target.value)}\n />\n </MDBCol>\n <MDBCol size=\"1\">\n <MDBBtn flat onClick={() => this.toggleMemberModal()}>\n <MDBIcon icon=\"plus\" size=\"lg\" className=\"blue-text\" />\n </MDBBtn>\n </MDBCol>\n </MDBRow>\n <MemberTable\n members={[]}\n onDeleteClick={() => this.deleteUser()}\n onEditClick={() => this.editUser()}\n ></MemberTable>\n </MDBContainer>\n {this.state.memberModal && (\n <MemberModal toggle={this.toggleMemberModal} />\n )}\n </>\n );\n }\n}\n//#endregion\n\n//#region > Redux Mapping\nconst mapStateToProps = (state: RootState) => ({ user: state.user });\n\nconst mapDispatchToProps = {\n login: loginAction,\n};\n//#endregion\n\n//#region > Exports\n/**\n * Provides its connected component with the pieces of the data it needs from\n * the store, and the functions it can use to dispatch actions to the store.\n *\n * Got access to the history object’s properties and the closest\n * <Route>'s match.\n */\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(MemberPage)\n);\n//#endregion\n/**\n * SPDX-License-Identifier: (EUPL-1.2)\n * Copyright © 2019-2020 Nico Schett\n */\n",{"ruleId":"174","replacedBy":"175"},{"ruleId":"176","replacedBy":"177"},{"ruleId":"178","severity":1,"message":"179","line":14,"column":10,"nodeType":"180","messageId":"181","endLine":14,"endColumn":21},{"ruleId":"178","severity":1,"message":"182","line":7,"column":3,"nodeType":"180","messageId":"181","endLine":7,"endColumn":11},{"ruleId":"178","severity":1,"message":"183","line":22,"column":8,"nodeType":"180","messageId":"181","endLine":22,"endColumn":18},{"ruleId":"178","severity":1,"message":"184","line":25,"column":10,"nodeType":"180","messageId":"181","endLine":25,"endColumn":23},{"ruleId":"178","severity":1,"message":"185","line":27,"column":10,"nodeType":"180","messageId":"181","endLine":27,"endColumn":17},{"ruleId":"178","severity":1,"message":"186","line":45,"column":24,"nodeType":"180","messageId":"181","endLine":45,"endColumn":39},{"ruleId":"187","severity":1,"message":"188","line":22,"column":13,"nodeType":"189","endLine":22,"endColumn":79},{"ruleId":"187","severity":1,"message":"190","line":59,"column":19,"nodeType":"189","endLine":62,"endColumn":20},{"ruleId":"178","severity":1,"message":"191","line":44,"column":9,"nodeType":"180","messageId":"181","endLine":44,"endColumn":19},{"ruleId":"192","severity":1,"message":"193","line":70,"column":13,"nodeType":"189","endLine":70,"endColumn":29},{"ruleId":"194","severity":1,"message":"195","line":120,"column":5,"nodeType":"196","endLine":120,"endColumn":15},{"ruleId":"194","severity":1,"message":"195","line":125,"column":5,"nodeType":"196","endLine":125,"endColumn":15},{"ruleId":"178","severity":1,"message":"197","line":196,"column":11,"nodeType":"180","messageId":"181","endLine":196,"endColumn":22},{"ruleId":"187","severity":1,"message":"190","line":262,"column":15,"nodeType":"189","endLine":262,"endColumn":78},{"ruleId":"178","severity":1,"message":"198","line":4,"column":17,"nodeType":"180","messageId":"181","endLine":4,"endColumn":25},{"ruleId":"178","severity":1,"message":"199","line":10,"column":10,"nodeType":"180","messageId":"181","endLine":10,"endColumn":13},{"ruleId":"178","severity":1,"message":"200","line":4,"column":17,"nodeType":"180","messageId":"181","endLine":4,"endColumn":26},{"ruleId":"178","severity":1,"message":"201","line":24,"column":24,"nodeType":"180","messageId":"181","endLine":24,"endColumn":29},{"ruleId":"178","severity":1,"message":"202","line":57,"column":7,"nodeType":"180","messageId":"181","endLine":57,"endColumn":15},{"ruleId":"178","severity":1,"message":"200","line":4,"column":17,"nodeType":"180","messageId":"181","endLine":4,"endColumn":26},{"ruleId":"178","severity":1,"message":"201","line":24,"column":24,"nodeType":"180","messageId":"181","endLine":24,"endColumn":29},{"ruleId":"178","severity":1,"message":"202","line":58,"column":7,"nodeType":"180","messageId":"181","endLine":58,"endColumn":15},{"ruleId":"178","severity":1,"message":"200","line":4,"column":17,"nodeType":"180","messageId":"181","endLine":4,"endColumn":26},{"ruleId":"178","severity":1,"message":"202","line":68,"column":7,"nodeType":"180","messageId":"181","endLine":68,"endColumn":15},{"ruleId":"203","severity":1,"message":"204","line":122,"column":27,"nodeType":"205","messageId":"206","endLine":122,"endColumn":29},{"ruleId":"178","severity":1,"message":"207","line":26,"column":8,"nodeType":"180","messageId":"181","endLine":26,"endColumn":16},{"ruleId":"178","severity":1,"message":"208","line":29,"column":10,"nodeType":"180","messageId":"181","endLine":29,"endColumn":19},{"ruleId":"178","severity":1,"message":"209","line":29,"column":21,"nodeType":"180","messageId":"181","endLine":29,"endColumn":33},"no-native-reassign",["210"],"no-negated-in-lhs",["211"],"@typescript-eslint/no-unused-vars","'ScrollToTop' is defined but never used.","Identifier","unusedVar","'Redirect' is defined but never used.","'MemberPage' is defined but never used.","'ThunkDispatch' is defined but never used.","'Ohrwurm' is defined but never used.","'passwordChanged' is assigned a value but never used.","jsx-a11y/anchor-is-valid","The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md","JSXOpeningElement","The href attribute is required for an anchor to be keyboard accessible. Provide a valid, navigable address as the href value. If you cannot provide an href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md","'transcript' is assigned a value but never used.","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","react/no-direct-mutation-state","Do not mutate state directly. Use setState().","MemberExpression","'activeStyle' is assigned a value but never used.","'useState' is defined but never used.","'PAC' is defined but never used.","'FormEvent' is defined but never used.","'Track' is defined but never used.","'truncate' is assigned a value but never used.","array-callback-return","Array.prototype.map() expects a return value from arrow function.","ArrowFunctionExpression","expectedInside","'Services' is defined but never used.","'LoginForm' is defined but never used.","'ServiceGroup' is defined but never used.","no-global-assign","no-unsafe-negation"]