frontend: layout / design tweaks
This commit is contained in:
parent
6ae8f05ee3
commit
6479c6c1c9
7 changed files with 107 additions and 78 deletions
|
@ -13,5 +13,4 @@ body .wrapper {
|
|||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.w-85 { width: 85%; }
|
||||
}
|
||||
|
|
|
@ -22,3 +22,7 @@
|
|||
.w-100 { width: 100%; }
|
||||
.w-95 { width: 95%; }
|
||||
.w-85 { width: 85%; }
|
||||
.h-100 { height: 100%; }
|
||||
.h-80 { height: 80%; }
|
||||
.h-50 { height: 50%; }
|
||||
.h-70 { height: 70%; }
|
||||
|
|
|
@ -33,8 +33,8 @@
|
|||
border-radius: 5px;
|
||||
min-width: 120px;
|
||||
text-align: center;
|
||||
background: $secondary-color;
|
||||
color: lighten($secondary-color, 15%);
|
||||
background: $primary-color;
|
||||
color: $secondary-color;
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
@ -51,6 +51,9 @@
|
|||
width: 100%;
|
||||
.task.content {
|
||||
padding: 10px;
|
||||
ul {
|
||||
padding: revert;
|
||||
}
|
||||
ul li {
|
||||
line-height: 1.7em;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class="root align-center max-width">
|
||||
<div class="react-mount edit-task"></div>
|
||||
<div class="wrapper align-center max-width h-100">
|
||||
<div class="react-mount edit-task h-100"></div>
|
||||
<script src="/js/main/task/edit.js"></script>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class="root align-center max-width">
|
||||
<div class="react-mount new-task"></div>
|
||||
<div class="wrapper align-center max-width h-100">
|
||||
<div class="react-mount new-task h-100"></div>
|
||||
<script src="/js/main/task/new.js"></script>
|
||||
</div>
|
||||
|
|
|
@ -6,6 +6,8 @@ import { useFindTask } from "/hooks/queries/useFindTask";
|
|||
import { useProjects } from "/hooks/queries/useProjects";
|
||||
import { Task, Project, TaskInput, Maybe } from "/types/schema";
|
||||
import { rendermd } from "/lib/markdown-utils";
|
||||
import { NavBar } from "/components/NavBar";
|
||||
|
||||
import classnames from "classnames";
|
||||
|
||||
const DEFAULT_TASK_CONTENT = [
|
||||
|
@ -30,7 +32,7 @@ export function Task({ taskId }: { taskId?: number }) {
|
|||
defaultValues: { projectId: 1 },
|
||||
});
|
||||
const [isEditable, setIsEditable] = useState<boolean>(!taskId);
|
||||
const [createTask] = useCreateTask();
|
||||
const createTask = useCreateTask();
|
||||
const updateTask = useUpdateTask();
|
||||
const { data: taskData, loading: findingTask } = useFindTask(Number(taskId));
|
||||
const { data: projectsData, loading: findingProjects } = useProjects();
|
||||
|
@ -64,77 +66,85 @@ export function Task({ taskId }: { taskId?: number }) {
|
|||
}
|
||||
|
||||
return (
|
||||
<form className="task" onSubmit={handleSubmit(onSave)}>
|
||||
<div className="panel">
|
||||
<div className="panel-header panel-tabs">
|
||||
<ul className="tabs">
|
||||
<li
|
||||
className={classnames({ active: isEditable })}
|
||||
onClick={() => setIsEditable(true)}
|
||||
>
|
||||
Write
|
||||
</li>
|
||||
<li
|
||||
className={classnames({ active: !isEditable })}
|
||||
onClick={() => setIsEditable(false)}
|
||||
>
|
||||
Preview
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="panel-body">
|
||||
<div>
|
||||
<select
|
||||
{...register("projectId")}
|
||||
className="form"
|
||||
value={projectId}
|
||||
onChange={event => {
|
||||
const v: string = event.target.value;
|
||||
set("projectId", Number(v));
|
||||
}}
|
||||
>
|
||||
{projects.map((project: Project, key: number) => {
|
||||
return (
|
||||
<option key={key} value={project.id}>
|
||||
{project.name}
|
||||
</option>
|
||||
);
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
className="form"
|
||||
type="text"
|
||||
placeholder="Title"
|
||||
defaultValue={task?.title}
|
||||
{...register("title", { required: true })}
|
||||
/>
|
||||
</div>
|
||||
{isEditable ? (
|
||||
<>
|
||||
<div className="row textarea">
|
||||
<textarea
|
||||
<div className="two-columns h-100">
|
||||
<div className="column-1">
|
||||
<NavBar />
|
||||
</div>
|
||||
<div className="column-2 h-100">
|
||||
<form className="task h-100" onSubmit={handleSubmit(onSave)}>
|
||||
<div className="panel h-100">
|
||||
<h1>{task ? "Edit task" : "New task"}</h1>
|
||||
<div className="panel-header panel-tabs">
|
||||
<ul className="tabs">
|
||||
<li
|
||||
className={classnames({ active: isEditable })}
|
||||
onClick={() => setIsEditable(true)}
|
||||
>
|
||||
Write
|
||||
</li>
|
||||
<li
|
||||
className={classnames({ active: !isEditable })}
|
||||
onClick={() => setIsEditable(false)}
|
||||
>
|
||||
Preview
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="panel-body h-80">
|
||||
<div>
|
||||
<select
|
||||
{...register("projectId")}
|
||||
className="form"
|
||||
placeholder="Add your description heren"
|
||||
defaultValue={task?.content || DEFAULT_TASK_CONTENT}
|
||||
{...register("content", { required: true })}
|
||||
value={projectId}
|
||||
onChange={event => {
|
||||
const v: string = event.target.value;
|
||||
set("projectId", Number(v));
|
||||
}}
|
||||
>
|
||||
{projects.map((project: Project, key: number) => {
|
||||
return (
|
||||
<option key={key} value={project.id}>
|
||||
{project.name}
|
||||
</option>
|
||||
);
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<input
|
||||
className="form"
|
||||
type="text"
|
||||
placeholder="Title"
|
||||
defaultValue={task?.title}
|
||||
{...register("title", { required: true })}
|
||||
/>
|
||||
</div>
|
||||
<div className="row">
|
||||
<input className="form" type="submit" value="Save" />
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<div
|
||||
className="task content"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: rendermd(content || task?.content),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
{isEditable ? (
|
||||
<>
|
||||
<div className="row textarea h-70">
|
||||
<textarea
|
||||
className="form h-100"
|
||||
placeholder="Add your description heren"
|
||||
defaultValue={task?.content || DEFAULT_TASK_CONTENT}
|
||||
{...register("content", { required: true })}
|
||||
/>
|
||||
</div>
|
||||
<div className="row">
|
||||
<input className="form" type="submit" value="Save" />
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<div
|
||||
className="task content h-50"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: rendermd(content || task?.content),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
import { CreateTaskPayload, MutationCreateTaskArgs } from "/types/schema";
|
||||
import {
|
||||
CreateTaskPayload,
|
||||
MutationCreateTaskArgs,
|
||||
TaskInput,
|
||||
} from "/types/schema";
|
||||
import { gql, useMutation } from "@apollo/client";
|
||||
|
||||
const GQL = gql`
|
||||
|
@ -9,6 +13,15 @@ const GQL = gql`
|
|||
}
|
||||
`;
|
||||
|
||||
type TArgs = {
|
||||
variables: { input: TaskInput };
|
||||
};
|
||||
|
||||
export function useCreateTask() {
|
||||
return useMutation<CreateTaskPayload, MutationCreateTaskArgs>(GQL);
|
||||
const [create] = useMutation<CreateTaskPayload, MutationCreateTaskArgs>(GQL);
|
||||
return ({ variables: { input }, ...rest }: TArgs) => {
|
||||
const projectId = Number(input.projectId);
|
||||
const variables = { input: { ...input, ...{ projectId } } };
|
||||
return create({ variables, ...rest });
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue