Remove IDEA config, add types for things
This commit is contained in:
parent
c7fcb0990f
commit
0a89712965
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,8 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# IDEA
|
||||||
|
/.idea
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
/.pnp
|
/.pnp
|
||||||
|
|||||||
5
.idea/.gitignore
generated
vendored
5
.idea/.gitignore
generated
vendored
@ -1,5 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
6
.idea/inspectionProfiles/Project_Default.xml
generated
6
.idea/inspectionProfiles/Project_Default.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<profile version="1.0">
|
|
||||||
<option name="myName" value="Project Default" />
|
|
||||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
|
||||||
</profile>
|
|
||||||
</component>
|
|
||||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/tremor-dashboard.iml" filepath="$PROJECT_DIR$/.idea/tremor-dashboard.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
12
.idea/tremor-dashboard.iml
generated
12
.idea/tremor-dashboard.iml
generated
@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="WEB_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@ -15,7 +15,13 @@ export function SubjectOverviewCard({
|
|||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
data: _project
|
data: _project
|
||||||
} = useSWR<any>(`/api/project?select=raw_json&toggl_id=eq.${projectId}`, fetcher);
|
} = useSWR<{
|
||||||
|
raw_json: {
|
||||||
|
name: string,
|
||||||
|
color: string,
|
||||||
|
}
|
||||||
|
}[]>(`/api/project?select=raw_json&toggl_id=eq.${projectId}`, fetcher);
|
||||||
|
|
||||||
const [project, setProject] = useState({
|
const [project, setProject] = useState({
|
||||||
name: '',
|
name: '',
|
||||||
color: '',
|
color: '',
|
||||||
@ -55,26 +61,37 @@ export function SubjectComparisonCard({projectIds}: {
|
|||||||
projectIds: number[]
|
projectIds: number[]
|
||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
data,
|
data: rawData,
|
||||||
error,
|
error,
|
||||||
isLoading,
|
isLoading,
|
||||||
} = useSWR<any[]>(`/api/time_entry?select=raw_json,project:project_id(name,raw_json)&project_id=in.(${projectIds.join(',')})`, fetcher, {});
|
} = useSWR<{
|
||||||
|
raw_json: {
|
||||||
|
seconds: number,
|
||||||
|
},
|
||||||
|
project: {
|
||||||
|
name: string,
|
||||||
|
raw_json: any
|
||||||
|
}
|
||||||
|
}[]>(`/api/time_entry?select=raw_json,project:project_id(name,raw_json)&project_id=in.(${projectIds.join(',')})`, fetcher, {});
|
||||||
|
|
||||||
const [a, setA] = useState<{ name: string, value: number }[]>([]);
|
const [breakdownData, setBreakdownData] = useState<{
|
||||||
|
name: string,
|
||||||
|
value: number
|
||||||
|
}[]>([]);
|
||||||
const [colours, setColours] = useState<string[]>([]);
|
const [colours, setColours] = useState<string[]>([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const a = R.toPairs(R.groupBy((entry) => entry.project.name, data ?? []))
|
const breakdownData = R.toPairs(R.groupBy((entry) => entry.project.name, rawData ?? []))
|
||||||
.map(([name, entries]) => ({
|
.map(([name, entries]) => ({
|
||||||
name,
|
name,
|
||||||
value: (entries ?? []).map((entry) => entry.raw_json.seconds).reduce((a, b) => a + b, 0),
|
value: (entries ?? []).map((entry) => entry.raw_json.seconds).reduce((a, b) => a + b, 0),
|
||||||
colour: entries?.[0].project.raw_json.color
|
colour: entries?.[0].project.raw_json.color
|
||||||
}))
|
}))
|
||||||
|
|
||||||
setA(a);
|
setBreakdownData(breakdownData);
|
||||||
|
|
||||||
setColours(a.map((entry) => entry.colour));
|
setColours(breakdownData.map((entry) => entry.colour));
|
||||||
}, [data]);
|
}, [rawData]);
|
||||||
|
|
||||||
const valueFormatter = (number: number) => `${(number / (60 * 60)).toFixed(2)} hours`;
|
const valueFormatter = (number: number) => `${(number / (60 * 60)).toFixed(2)} hours`;
|
||||||
|
|
||||||
@ -83,7 +100,7 @@ export function SubjectComparisonCard({projectIds}: {
|
|||||||
<Title>Relative Breakdown</Title>
|
<Title>Relative Breakdown</Title>
|
||||||
<DonutChart
|
<DonutChart
|
||||||
className="mt-6"
|
className="mt-6"
|
||||||
data={a ?? []}
|
data={breakdownData ?? []}
|
||||||
category="value"
|
category="value"
|
||||||
index="name"
|
index="name"
|
||||||
valueFormatter={valueFormatter}
|
valueFormatter={valueFormatter}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import { Tooltip } from 'react-tooltip';
|
|||||||
|
|
||||||
const initialDate = dFns.parseISO('2023-12-15T00:00:00.000Z')
|
const initialDate = dFns.parseISO('2023-12-15T00:00:00.000Z')
|
||||||
const endDate = dFns.parseISO('2024-01-25T00:00:00.000Z')
|
const endDate = dFns.parseISO('2024-01-25T00:00:00.000Z')
|
||||||
const projectIds = [
|
export const projectIds = [
|
||||||
195482340,
|
195482340,
|
||||||
195519024,
|
195519024,
|
||||||
195518593,
|
195518593,
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import {SubjectComparisonCard, SubjectOverviewCard} from "@/app/a.client";
|
import {SubjectComparisonCard, SubjectOverviewCard} from "@/app/a.client";
|
||||||
import {CalendarOverviewCard} from "@/app/calendarOverviewCard";
|
import {CalendarOverviewCard, projectIds} from "@/app/calendarOverviewCard";
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
return (
|
return (
|
||||||
@ -26,6 +26,8 @@ export default function Home() {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<CalendarOverviewCard/>
|
<CalendarOverviewCard/>
|
||||||
|
|
||||||
|
<SubjectComparisonCard projectIds={projectIds}/>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user