diff --git a/Dockerfile.dev b/Dockerfile.dev index 49db1016..6c52b7fe 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,19 +1,20 @@ FROM node:16-alpine3.14 RUN addgroup app && adduser -SG app app -RUN mkdir /app && chown app:app /app ` +RUN mkdir /app && chown app:app /app USER app -WORKDIR /app/backend -COPY --chown=app:app backend/package*.json ./ -RUN npm i - -WORKDIR /app/frontend -COPY --chown=app:app frontend/package*.json ./ -RUN npm i +# WORKDIR /app/frontend +# COPY --chown=app:app ./frontend/package*.json ./ +# RUN ln -s ./frontend/src/types /app +# RUN npm i WORKDIR /app COPY --chown=app:app . . +# WORKDIR /app/backend +# COPY --chown=app:app ./backend/package*.json ./ +# RUN npm i + EXPOSE 3000 EXPOSE 4200 CMD ./bin/start-dev.sh \ No newline at end of file diff --git a/backend/src/data/themes.ts b/backend/src/data/themes.ts index e3fe60d8..29ac3999 100644 --- a/backend/src/data/themes.ts +++ b/backend/src/data/themes.ts @@ -42,7 +42,7 @@ export default class Themes extends DBWrapper { public parse(styles: string) { try { parseCSS(styles) } catch (error: any) { - throw new TypeError(`CSS Error: ${styles}`) + throw new TypeError(`CSS Error: ${error.message}`); } } } \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 1906c2fb..81b05471 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -14,9 +14,9 @@ services: ports: [3000:3000, 4200:4200] env_file: [./backend/.env, ./frontend/env/.env.dev] volumes: - - ./backend/src:/app/src - - ./backend/assets:/app/assets - - ./backend/logs:/app/logs - - ./frontend/src:/app/src + - ./backend/src:/app/backend/src + - ./backend/assets:/app/backend/assets + - ./backend/logs:/app/backend/logs + - ./frontend/src:/app/frontend/src volumes: accord: \ No newline at end of file diff --git a/frontend/src/components/inputs/file-input.tsx b/frontend/src/components/inputs/file-input.tsx index 26b3b301..d90645c7 100644 --- a/frontend/src/components/inputs/file-input.tsx +++ b/frontend/src/components/inputs/file-input.tsx @@ -10,7 +10,7 @@ const FileInput: React.FunctionComponent = (props) => { {}} type="file" {...props} diff --git a/frontend/src/components/inputs/input.scoped.css b/frontend/src/components/inputs/input.scoped.css index 56bd1d67..8b425522 100644 --- a/frontend/src/components/inputs/input.scoped.css +++ b/frontend/src/components/inputs/input.scoped.css @@ -8,3 +8,7 @@ input:hover { input:focus { border: 1px solid var(--link); } +input:disabled { + color: var(--muted); + cursor: not-allowed; +} diff --git a/frontend/src/components/inputs/input.tsx b/frontend/src/components/inputs/input.tsx index d0553fac..b4f14eae 100644 --- a/frontend/src/components/inputs/input.tsx +++ b/frontend/src/components/inputs/input.tsx @@ -17,6 +17,7 @@ export interface InputProps { className?: string; disabled?: boolean; tooltip?: string; + setFocusedInputId?: (val: any) => any; } const Input: React.FunctionComponent> = (props) => { @@ -50,6 +51,7 @@ const Input: React.FunctionComponent props.setFocusedInputId?.(e.currentTarget.id)} {...filterProps(props)} {...register?.(name, { ...options })} size={60} diff --git a/frontend/src/components/modals/user-settings/user-settings-themes.tsx b/frontend/src/components/modals/user-settings/user-settings-themes.tsx index 1d1f0cf8..76f16ca2 100644 --- a/frontend/src/components/modals/user-settings/user-settings-themes.tsx +++ b/frontend/src/components/modals/user-settings/user-settings-themes.tsx @@ -1,4 +1,3 @@ -import { TextareaAutosize } from '@material-ui/core'; import classNames from 'classnames'; import React, { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; @@ -20,11 +19,19 @@ const UserSettingsThemes: React.FunctionComponent = () => { const themes = useSelector((s: Store.AppState) => s.entities.themes); const [themeId, setTab] = useState(selfUser.activeThemeId); const [addMode, enableAddMode] = useState(false); + const [focusedInputId, setFocusedInputId] = useState(''); const theme = getTheme(themeId, themes); useEffect(() => { if (!theme) setTab('default'); }, [theme, themeId]); + + const refreshFocus = () => { + if (!focusedInputId) return; + + const input: HTMLInputElement | null = document.querySelector(`#${focusedInputId}`); + input?.focus(); + } const SideIcons: React.FunctionComponent = () => (
@@ -80,7 +87,7 @@ const UserSettingsThemes: React.FunctionComponent = () => {
{ label="Name" name="name" register={register} + setFocusedInputId={setFocusedInputId} options={{ value: theme.name }} /> { label="Code" name="code" register={register} - options={{ value: theme.code }} /> + options={{ value: theme.code }} + setFocusedInputId={setFocusedInputId} + disabled /> { const file = e.currentTarget?.files?.[0]; if (!file) return; @@ -148,9 +160,11 @@ const UserSettingsThemes: React.FunctionComponent = () => {