// Dependencies import orderBy from 'lodash/orderBy.js' import { capitalize, shortDate } from '@freesewing/utils' // Context import { LoadingStatusContext } from '@freesewing/react/context/LoadingStatus' //import { ModalContext } from '@freesewing/react/context/Modal' // Hooks import React, { useState, useEffect, useContext } from 'react' import { useAccount } from '@freesewing/react/hooks/useAccount' import { useBackend } from '@freesewing/react/hooks/useBackend' import { useSelection } from '@freesewing/react/hooks/useSelection' // Components import { TableWrapper } from '@freesewing/react/components/Table' import { Link as WebLink } from '@freesewing/react/components/Link' import { BoolNoIcon, BoolYesIcon, PlusIcon, RightIcon, TrashIcon, } from '@freesewing/react/components/Icon' import { Uuid } from '@freesewing/react/components/Uuid' const t = (input) => { console.log('t called', input) return input } /* * Component for the account/apikeys page * * @params {object} props - All React props * @params {function} Link - A framework specific Link component for client-side routing */ export const Apikeys = ({ Link = false }) => { if (!Link) Link = WebLink // State const [apikeys, setApikeys] = useState([]) const [refresh, setRefresh] = useState(0) const [order, setOrder] = useState('id') const [desc, setDesc] = useState(false) // Hooks const backend = useBackend() const { setLoadingStatus, LoadingProgress } = useContext(LoadingStatusContext) const { count, selection, setSelection, toggle, toggleAll } = useSelection(apikeys) // Effects useEffect(() => { const getApikeys = async () => { setLoadingStatus([true, 'Loading API keys from backend']) const [status, body] = await backend.getApikeys() if (status === 200) { setApikeys(body.apikeys) setLoadingStatus([true, 'API keys loaded', true, true]) } else setLoadingStatus([false, 'Failed to load API keys from backend', true, true]) } getApikeys() }, [refresh]) // Helper to delete one or more patterns const removeSelectedApikeys = async () => { let i = 0 for (const key in selection) { i++ await backend.removeApikey(key) setLoadingStatus([ true, , ]) } setSelection({}) setRefresh(refresh + 1) setLoadingStatus([true, 'Nailed it', true, true]) } const fields = { id: 'Key', name: 'Name', calls: 'Calls', level: 'Level', level: 'Level', createdAt: 'Created', expiresAt: 'Expires', } return ( <>
Create a new API key
{Object.keys(fields).map((field) => ( ))} {orderBy(apikeys, order, desc ? 'desc' : 'asc').map((apikey, i) => ( {Object.keys(fields) .slice(1, 3) .map((field) => ( ))} ))}
toggle(apikey.id)} /> {apikey[field]} {shortDate(apikey.createdAt)} {shortDate(apikey.expiresAt)}
) }