diff --git a/.gitignore b/.gitignore index ab47379..da24f6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ application/node_modules application/src/.next +application/src/.vscode diff --git a/Dockerfile b/Dockerfile index 40a9701..b8e7212 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /srv COPY application/package*.json ./ RUN npm install --frozen-lockfile COPY application/. . +RUN chmod -R uog+r . RUN npm run build FROM build as dev @@ -17,6 +18,7 @@ EXPOSE 3000 WORKDIR /srv COPY --from=build /srv/node_modules ./node_modules COPY --from=build /srv/package*.json ./ +COPY --from=build /srv/next.config.js ./ COPY --from=build --chown=nextjs:nodejs /srv/src/.next ./.next COPY --from=build /srv/src/public ./public CMD node_modules/.bin/next start diff --git a/application/package.json b/application/package.json index 06e408d..dca61b6 100644 --- a/application/package.json +++ b/application/package.json @@ -10,7 +10,7 @@ "scripts": { "dev": "next dev ./src --hostname 0.0.0.0", "build": "next build ./src", - "start": "next start ./src", + "start": "next start", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "generate:graphql-types": "graphql-codegen-esm --config graphql-codegen.yml" }, diff --git a/application/src/components/ResponsiveTable.tsx b/application/src/components/ResponsiveTable.tsx index 0be096a..27f7056 100644 --- a/application/src/components/ResponsiveTable.tsx +++ b/application/src/components/ResponsiveTable.tsx @@ -1,14 +1,14 @@ -import React, {ReactElement, ReactNode} from "react"; +import React, { ReactElement, ReactNode } from 'react' -export default function ResponsiveTable({children, className}: { - children: ReactNode, - className?: string +export default function ResponsiveTable ({ children, className }: { + children: ReactNode + className?: string }): ReactElement { - return ( + return (
- +
{children}
- ) + ) } diff --git a/application/src/components/SoftwareBadgePlaceholder.tsx b/application/src/components/SoftwareBadgePlaceholder.tsx index d0dfa56..9ab2b6f 100644 --- a/application/src/components/SoftwareBadgePlaceholder.tsx +++ b/application/src/components/SoftwareBadgePlaceholder.tsx @@ -1,10 +1,10 @@ 'use client' -import {faCircle} from "@fortawesome/free-solid-svg-icons"; -import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import React, {ReactElement} from "react"; +import { faCircle } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import React, { ReactElement } from 'react' -export default function SoftwareBadgePlaceholder():ReactElement{ - return
+export default function SoftwareBadgePlaceholder (): ReactElement { + return
diff --git a/application/src/components/accordion/Accordion.tsx b/application/src/components/accordion/Accordion.tsx index 4124d88..00f12b9 100644 --- a/application/src/components/accordion/Accordion.tsx +++ b/application/src/components/accordion/Accordion.tsx @@ -1,30 +1,30 @@ 'use client' -import React, {ReactElement, ReactNode, useContext, useState} from "react"; +import React, { ReactElement, ReactNode, useContext, useState } from 'react' const AccordionContext = React.createContext<{ - expandedId: string | undefined, - setExpandedId: (id: string | undefined) => void + expandedId: string | undefined + setExpandedId: (id: string | undefined) => void } | undefined>(undefined) export const useAccordion = (id: string): [boolean, () => void] => { - const context = useContext(AccordionContext) - if (context === undefined) { - throw new Error('Hook useAccordion needs to be used in Accordion element') + const context = useContext(AccordionContext) + if (context === undefined) { + throw new Error('Hook useAccordion needs to be used in Accordion element') + } + const { expandedId, setExpandedId } = context + return [ + expandedId === id, + () => { + setExpandedId(expandedId === id ? undefined : id) } - const {expandedId, setExpandedId} = context; - return [ - expandedId === id, - () => { - setExpandedId(expandedId === id ? undefined : id) - } - ] + ] } -export default function Accordion({children}: { - children: ReactNode +export default function Accordion ({ children }: { + children: ReactNode }): ReactElement { - const [expandedId, setExpandedId] = useState(undefined) - return + const [expandedId, setExpandedId] = useState(undefined) + return
{children}
diff --git a/application/src/components/feed/FeedForm.tsx b/application/src/components/feed/FeedForm.tsx index d7488e2..064ddea 100644 --- a/application/src/components/feed/FeedForm.tsx +++ b/application/src/components/feed/FeedForm.tsx @@ -1,10 +1,9 @@ 'use client' import { faSearch } from '@fortawesome/free-solid-svg-icons' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import React, { ReactElement } from 'react' import { FeedQueryInput } from '../../graphql/generated/types' -import SearchInput from "../form/SearchInput"; -import SubmitButton from "../form/SubmitButton"; +import SearchInput from '../form/SearchInput' +import SubmitButton from '../form/SubmitButton' export default function FeedForm ( { onSubmit, onQueryChange, query }: { @@ -42,7 +41,7 @@ export default function FeedForm (
diff --git a/application/src/components/feed/FeedInfo.tsx b/application/src/components/feed/FeedInfo.tsx index a370abf..4ce11c4 100644 --- a/application/src/components/feed/FeedInfo.tsx +++ b/application/src/components/feed/FeedInfo.tsx @@ -1,8 +1,8 @@ -import {ReactElement, ReactNode} from "react"; +import React, { ReactElement, ReactNode } from 'react' -export default function FeedInfo({children, show}: { children?: ReactNode, show?: boolean }): ReactElement { - if (show === false) { - return <>{children} - } - return <> +export default function FeedInfo ({ children, show }: { children?: ReactNode, show?: boolean }): ReactElement { + if (show === false) { + return <>{children} + } + return <> } diff --git a/application/src/components/feed/FeedPlaceholder.tsx b/application/src/components/feed/FeedPlaceholder.tsx index 40e828d..629e80c 100644 --- a/application/src/components/feed/FeedPlaceholder.tsx +++ b/application/src/components/feed/FeedPlaceholder.tsx @@ -1,8 +1,6 @@ import { faCircle } from '@fortawesome/free-solid-svg-icons' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import React, { ReactElement } from 'react' -import SoftwareBadge from "../SoftwareBadge"; -import SoftwareBadgePlaceholder from "../SoftwareBadgePlaceholder"; +import SoftwareBadgePlaceholder from '../SoftwareBadgePlaceholder' import Avatar from './Avatar' import Badge from './badges/Badge' diff --git a/application/src/components/form/SearchInput.tsx b/application/src/components/form/SearchInput.tsx index 2eda004..7355b1a 100644 --- a/application/src/components/form/SearchInput.tsx +++ b/application/src/components/form/SearchInput.tsx @@ -1,12 +1,12 @@ -import React, {ChangeEventHandler, ReactElement} from "react"; +import React, { ChangeEventHandler, ReactElement } from 'react' -export default function SearchInput({label, onChange, value, describedBy}: { - label: string, - onChange?: ChangeEventHandler, - value?: string, - describedBy?: string +export default function SearchInput ({ label, onChange, value, describedBy }: { + label: string + onChange?: ChangeEventHandler + value?: string + describedBy?: string }): ReactElement { - return + return diff --git a/application/src/components/node/NodeForm.tsx b/application/src/components/node/NodeForm.tsx index 4ada0b1..64df506 100644 --- a/application/src/components/node/NodeForm.tsx +++ b/application/src/components/node/NodeForm.tsx @@ -1,35 +1,35 @@ 'use client' -import {faSearch} from '@fortawesome/free-solid-svg-icons' -import React, {ReactElement} from 'react' -import {NodeQueryInput} from '../../graphql/generated/types' -import SearchInput from "../form/SearchInput"; -import SubmitButton from "../form/SubmitButton"; +import { faSearch } from '@fortawesome/free-solid-svg-icons' +import React, { ReactElement } from 'react' +import { NodeQueryInput } from '../../graphql/generated/types' +import SearchInput from '../form/SearchInput' +import SubmitButton from '../form/SubmitButton' -export default function NodeForm( - {onSubmit, onQueryChange, query}: { - onSubmit: () => void - onQueryChange: (query: NodeQueryInput) => void - query: NodeQueryInput - } +export default function NodeForm ( + { onSubmit, onQueryChange, query }: { + onSubmit: () => void + onQueryChange: (query: NodeQueryInput) => void + query: NodeQueryInput + } ): ReactElement { - const handleQueryChange = (event): void => { - const inputElement = event.target - const value = inputElement.value - const name = inputElement.name - const newQuery = { - ...query - } - newQuery[name] = value - onQueryChange(newQuery) - event.preventDefault() + const handleQueryChange = (event): void => { + const inputElement = event.target + const value = inputElement.value + const name = inputElement.name + const newQuery = { + ...query } + newQuery[name] = value + onQueryChange(newQuery) + event.preventDefault() + } - const handleSubmit = (event): void => { - event.preventDefault() - onSubmit() - } + const handleSubmit = (event): void => { + event.preventDefault() + onSubmit() + } - return ( + return (
- ) + ) } diff --git a/application/src/components/node/NodeHeader.tsx b/application/src/components/node/NodeHeader.tsx index 7c09298..19851c1 100644 --- a/application/src/components/node/NodeHeader.tsx +++ b/application/src/components/node/NodeHeader.tsx @@ -1,12 +1,12 @@ -import React, {ReactElement} from "react"; -import {NodeQueryInput, NodeSortingByEnum} from "../../graphql/generated/types"; -import SortToggle from "../SortToggle"; +import React, { ReactElement } from 'react' +import { NodeQueryInput, NodeSortingByEnum } from '../../graphql/generated/types' +import SortToggle from '../SortToggle' -export default function NodeHeader({query,onSortToggle}:{ - query: NodeQueryInput - onSortToggle: (sortBy: NodeSortingByEnum)=> void -}):ReactElement{ - return ( +export default function NodeHeader ({ query, onSortToggle }: { + query: NodeQueryInput + onSortToggle: (sortBy: NodeSortingByEnum) => void +}): ReactElement { + return ( @@ -59,5 +59,5 @@ export default function NodeHeader({query,onSortToggle}:{ - ) + ) } diff --git a/application/src/components/node/NodeResults.tsx b/application/src/components/node/NodeResults.tsx index 6c01d8c..a6d6ce5 100644 --- a/application/src/components/node/NodeResults.tsx +++ b/application/src/components/node/NodeResults.tsx @@ -1,27 +1,27 @@ -import React, {ReactElement} from "react"; -import {ListNodesItemFragment} from "../../graphql/generated/types"; -import NodeResult from "./NodeResult"; +import React, { ReactElement } from 'react' +import { ListNodesItemFragment } from '../../graphql/generated/types' +import NodeResult from './NodeResult' -export default function NodeResults({nodes}:{ - nodes:ListNodesItemFragment[]|undefined, -}):ReactElement{ - if(nodes === undefined){ - return <> - } +export default function NodeResults ({ nodes }: { + nodes: ListNodesItemFragment[] | undefined +}): ReactElement { + if (nodes === undefined) { + return <> + } - return ( + return ( {(nodes.length > 0) - ? nodes.map((node, index) => { - return ( + ? nodes.map((node, index) => { + return ( - ) - }) - : ( + ) + }) + : ( No servers found )} - ) + ) } diff --git a/application/src/components/optout/OptoutLabel.tsx b/application/src/components/optout/OptoutLabel.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/application/src/components/stats/Stats.tsx b/application/src/components/stats/Stats.tsx index f944299..5c2a9e5 100644 --- a/application/src/components/stats/Stats.tsx +++ b/application/src/components/stats/Stats.tsx @@ -1,7 +1,7 @@ 'use client' import { useQuery } from '@apollo/client' import { usePathname, useRouter, useSearchParams } from 'next/navigation' -import { ReactElement, useEffect, useState } from 'react' +import React, { ReactElement, useEffect, useState } from 'react' import { ListStatsDocument, SortingWayEnum, StatsAggregationFragment, diff --git a/application/src/components/stats/StatsFooter.tsx b/application/src/components/stats/StatsFooter.tsx index e3c8c14..d4baf6a 100644 --- a/application/src/components/stats/StatsFooter.tsx +++ b/application/src/components/stats/StatsFooter.tsx @@ -1,15 +1,15 @@ -import {ReactElement} from "react"; -import {StatsAggregationFragment} from "../../graphql/generated/types"; +import React, { ReactElement } from 'react' +import { StatsAggregationFragment } from '../../graphql/generated/types' -export default function StatsFooter({sumAggregation}: { sumAggregation: StatsAggregationFragment | undefined }): ReactElement { - return ( +export default function StatsFooter ({ sumAggregation }: { sumAggregation: StatsAggregationFragment | undefined }): ReactElement { + return ( Summary - {sumAggregation?.nodeCount??0} - {sumAggregation?.accountFeedCount??0} - {sumAggregation?.channelFeedCount??0} + {sumAggregation?.nodeCount ?? 0} + {sumAggregation?.accountFeedCount ?? 0} + {sumAggregation?.channelFeedCount ?? 0} - ) + ) } diff --git a/application/src/components/stats/StatsHeader.tsx b/application/src/components/stats/StatsHeader.tsx index 75527e1..26b136a 100644 --- a/application/src/components/stats/StatsHeader.tsx +++ b/application/src/components/stats/StatsHeader.tsx @@ -1,13 +1,13 @@ 'use client' -import {ReactElement} from "react"; -import {NodeSortingByEnum, StatsQueryInput, StatsSortingByEnum} from "../../graphql/generated/types"; -import SortToggle from "../SortToggle"; +import React, { ReactElement } from 'react' +import { StatsQueryInput, StatsSortingByEnum } from '../../graphql/generated/types' +import SortToggle from '../SortToggle' -export default function StatsHeader({query,onSortToggle}: { - query: StatsQueryInput, - onSortToggle: (sortBy: StatsSortingByEnum) => void +export default function StatsHeader ({ query, onSortToggle }: { + query: StatsQueryInput + onSortToggle: (sortBy: StatsSortingByEnum) => void }): ReactElement { - return + return diff --git a/application/src/components/stats/StatsResults.tsx b/application/src/components/stats/StatsResults.tsx index ffc44aa..d67b028 100644 --- a/application/src/components/stats/StatsResults.tsx +++ b/application/src/components/stats/StatsResults.tsx @@ -1,4 +1,4 @@ -import { ReactElement } from 'react' +import React, { ReactElement } from 'react' import { StatsAggregationFragment, StatsItemFragment } from '../../graphql/generated/types' import StatsResult from './StatsResult'