Skip to content

Commit

Permalink
improve adminjs to import qfround matching and better filters
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlosQ96 committed Sep 6, 2024
1 parent 23bdade commit cc79c2c
Show file tree
Hide file tree
Showing 7 changed files with 382 additions and 4 deletions.
28 changes: 28 additions & 0 deletions src/server/adminJs/tabs/components/CustomIdFilterComponent.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React from 'react';
import { FormGroup, Label, Input } from '@adminjs/design-system';

const CustomIdFilterComponent = props => {
const { onChange, property, filter } = props;
const handleChange = event => {
onChange(property.path, event.target.value);
};

return (
<FormGroup>
<Label>{property.label}</Label>
<Input
type="text"
onChange={handleChange}
value={filter[property.path] || ''}
placeholder={`Enter ${property.label} ID`}
style={{
color: 'white',
backgroundColor: 'rgba(255, 255, 255, 0.1)', // Semi-transparent white background
borderColor: 'rgba(255, 255, 255, 0.3)', // Lighter border for contrast
}}
/>
</FormGroup>
);
};

export default CustomIdFilterComponent;
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// components/CustomProjectReferenceListComponent.jsx
import React from 'react';
import { Link } from '@adminjs/design-system';

const CustomProjectReferenceListComponent = props => {
const { record } = props;
const projectId =
record.params.project?.id || record.params.projectId || 'N/A';
const href = `/admin/resources/Project/records/${projectId}/show`;

return <Link href={href}>Project {projectId}</Link>;
};

export default CustomProjectReferenceListComponent;
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// components/CustomProjectReferenceShowComponent.jsx
import React from 'react';
import { Link, ValueGroup } from '@adminjs/design-system';

const CustomProjectReferenceShowComponent = props => {
const { record } = props;
const projectId =
record.params.project?.id || record.params.projectId || 'N/A';
const href = `/admin/resources/Project/records/${projectId}/show`;

return (
<ValueGroup label="Project">
<Link href={href} style={{ color: 'inherit', textDecoration: 'none' }}>
{projectId}
</Link>
</ValueGroup>
);
};

export default CustomProjectReferenceShowComponent;
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
// customQfRoundMultiUpdateComponent.js
import React, { useState } from 'react';
import { Box, Button, Text, DatePicker, Select } from '@adminjs/design-system';
import { FormGroup, Label, Input } from '@adminjs/design-system';
import { ApiClient } from 'adminjs';

const RecordInput = ({ index, record, updateRecord, removeRecord }) => (
<Box mb="lg" variant="white">
<FormGroup>
<Label>Project ID</Label>
<Input
value={record.projectId}
onChange={e => updateRecord(index, 'projectId', e.target.value)}
required
/>
</FormGroup>
<FormGroup>
<Label>QF Round ID</Label>
<Input
value={record.qfroundId}
onChange={e => updateRecord(index, 'qfroundId', e.target.value)}
required
/>
</FormGroup>
<FormGroup>
<Label>Matching Fund Amount</Label>
<Input
value={record.matchingFundAmount}
onChange={e =>
updateRecord(index, 'matchingFundAmount', e.target.value)
}
required
/>
</FormGroup>
<FormGroup>
<Label>Matching Fund Price USD</Label>
<Input
value={record.matchingFundPriceUsd}
onChange={e =>
updateRecord(index, 'matchingFundPriceUsd', e.target.value)
}
required
/>
</FormGroup>
<FormGroup>
<Label>Matching Fund Currency</Label>
<Select
options={[
{ value: 'ETH', label: 'ETH' },
{ value: 'DAI', label: 'DAI' },
{ value: 'USDC', label: 'USDC' },
]}
value={record.matchingFundCurrency}
onChange={selected =>
updateRecord(index, 'matchingFundCurrency', selected.value)
}
required
/>
</FormGroup>
<FormGroup>
<Label>Distributed Fund Tx Hash</Label>
<Input
value={record.distributedFundTxHash}
onChange={e =>
updateRecord(index, 'distributedFundTxHash', e.target.value)
}
/>
</FormGroup>
<FormGroup>
<Label>Distributed Fund Network</Label>
<Input
value={record.distributedFundNetwork}
onChange={e =>
updateRecord(index, 'distributedFundNetwork', e.target.value)
}
/>
</FormGroup>
<FormGroup>
<Label>Distributed Fund Tx Date</Label>
<DatePicker
value={record.distributedFundTxDate}
onChange={date => updateRecord(index, 'distributedFundTxDate', date)}
/>
</FormGroup>
<Button onClick={() => removeRecord(index)} mt="default">
Remove
</Button>
</Box>
);

const CustomQfRoundMultiUpdateComponent = props => {
const [records, setRecords] = useState([
{
projectId: '',
qfroundId: '',
matchingFundAmount: '',
matchingFundPriceUsd: '',
matchingFundCurrency: '',
distributedFundTxHash: '',
distributedFundNetwork: '',
distributedFundTxDate: null,
},
]);
const [message, setMessage] = useState('');

const api = new ApiClient();

const addRecord = () => {
setRecords([
...records,
{
projectId: '',
qfroundId: '',
matchingFundAmount: '',
matchingFundPriceUsd: '',
matchingFundCurrency: '',
distributedFundTxHash: '',
distributedFundNetwork: '',
distributedFundTxDate: null,
},
]);
};

const updateRecord = (index, field, value) => {
const updatedRecords = [...records];
updatedRecords[index][field] = value;
setRecords(updatedRecords);
};

const removeRecord = index => {
const updatedRecords = records.filter((_, i) => i !== index);
setRecords(updatedRecords);
};

const handleSubmit = async event => {
event.preventDefault();
setMessage('');

try {
const response = await api.resourceAction({
resourceId: 'QfRoundHistory',
actionName: 'bulkUpdate',
data: { records },
});

if (response.data.notice) {
if (typeof response.data.notice === 'string') {
setMessage(response.data.notice);
} else if (typeof response.data.notice.message === 'string') {
setMessage(response.data.notice.message);
} else {
setMessage('Update successful');
}
} else {
setMessage('Update successful');
}
} catch (error) {
setMessage(`Error: ${error.message}`);
}
};

return (
<Box as="form" onSubmit={handleSubmit}>
<Text variant="lg" fontWeight="bold">
Update Multiple QfRoundHistory Records
</Text>
{records.map((record, index) => (
<RecordInput
key={index}
index={index}
record={record}
updateRecord={updateRecord}
removeRecord={removeRecord}
/>
))}
<Button onClick={addRecord} mt="default">
Add Another Record
</Button>
<Button type="submit" mt="xl">
Update All
</Button>
{message && <Text mt="default">{message}</Text>}
</Box>
);
};

export default CustomQfRoundMultiUpdateComponent;
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// components/CustomQfRoundReferenceListComponent.jsx
import React from 'react';
import { Link } from '@adminjs/design-system';

const CustomQfRoundReferenceListComponent = props => {
const { record } = props;
const qfRoundId =
record.params.qfRound?.id || record.params.qfRoundId || 'N/A';
const href = `/admin/resources/QfRound/records/${qfRoundId}/show`;

return <Link href={href}>QF Round {qfRoundId}</Link>;
};

export default CustomQfRoundReferenceListComponent;
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// components/CustomQfRoundReferenceShowComponent.jsx
import React from 'react';
import { Link, ValueGroup } from '@adminjs/design-system';

const CustomQfRoundReferenceShowComponent = props => {
const { record } = props;
const qfRoundId =
record.params.qfRound?.id || record.params.qfRoundId || 'N/A';
const href = `/admin/resources/QfRound/records/${qfRoundId}/show`;

return (
<ValueGroup label="QF Round">
<Link href={href} style={{ color: 'inherit', textDecoration: 'none' }}>
{qfRoundId}
</Link>
</ValueGroup>
);
};

export default CustomQfRoundReferenceShowComponent;
Loading

0 comments on commit cc79c2c

Please sign in to comment.