Feat(settings-ratecard-drawer): add role show drop down fix

This commit is contained in:
shancds
2025-05-23 06:47:12 +05:30
parent e245530a15
commit 1a5f6d54ed

View File

@@ -43,7 +43,7 @@ const RatecardDrawer = ({
const [isAddingRole, setIsAddingRole] = useState(false); const [isAddingRole, setIsAddingRole] = useState(false);
const [selectedJobTitleId, setSelectedJobTitleId] = useState<string | undefined>(undefined); const [selectedJobTitleId, setSelectedJobTitleId] = useState<string | undefined>(undefined);
const [searchQuery, setSearchQuery] = useState(''); const [searchQuery, setSearchQuery] = useState('');
const [currency, setCurrency] = useState('LKR'); const [currency, setCurrency] = useState('USD');
const [name, setName] = useState<string>('Untitled Rate Card'); const [name, setName] = useState<string>('Untitled Rate Card');
const [jobTitles, setJobTitles] = useState<IJobTitlesViewModel>({}); const [jobTitles, setJobTitles] = useState<IJobTitlesViewModel>({});
const [pagination, setPagination] = useState<PaginationType>({ const [pagination, setPagination] = useState<PaginationType>({
@@ -95,7 +95,7 @@ const RatecardDrawer = ({
if (type === 'update' && drawerRatecard) { if (type === 'update' && drawerRatecard) {
setRoles(drawerRatecard.jobRolesList || []); setRoles(drawerRatecard.jobRolesList || []);
setName(drawerRatecard.name || ''); setName(drawerRatecard.name || '');
setCurrency(drawerRatecard.currency || 'LKR'); setCurrency(drawerRatecard.currency || 'USD');
} }
}, [drawerRatecard, type]); }, [drawerRatecard, type]);
@@ -121,15 +121,17 @@ const RatecardDrawer = ({
setRoles(mergedRoles); setRoles(mergedRoles);
}; };
const handleAddRole = () => { const handleAddRole = () => {
// Only allow adding if there are job titles not already in roles
const existingIds = new Set(roles.map(r => r.job_title_id)); const existingIds = new Set(roles.map(r => r.job_title_id));
const availableJobTitles = jobTitles.data?.filter(jt => !existingIds.has(jt.id!)); const availableJobTitles = jobTitles.data?.filter(jt => !existingIds.has(jt.id!));
if (availableJobTitles && availableJobTitles.length > 0) { if (availableJobTitles && availableJobTitles.length > 0) {
setRoles([...roles, { job_title_id: '', rate: 0 }]); setRoles([...roles, { job_title_id: '', rate: 0 }]);
setAddingRowIndex(roles.length); // index of the new row setAddingRowIndex(roles.length);
setIsAddingRole(true);
} }
}; };
const handleDeleteRole = (index: number) => { const handleDeleteRole = (index: number) => {
const updatedRoles = [...roles]; const updatedRoles = [...roles];
updatedRoles.splice(index, 1); updatedRoles.splice(index, 1);
@@ -185,7 +187,7 @@ const RatecardDrawer = ({
} finally { } finally {
setRoles([]); setRoles([]);
setName('Untitled Rate Card'); setName('Untitled Rate Card');
setCurrency('LKR'); setCurrency('USD');
} }
} }
}; };
@@ -253,14 +255,13 @@ const RatecardDrawer = ({
render: (text: number, record: any, index: number) => ( render: (text: number, record: any, index: number) => (
<Input <Input
type="number" type="number"
autoFocus={index === addingRowIndex}
value={roles[index]?.rate ?? 0} value={roles[index]?.rate ?? 0}
style={{ style={{
background: 'transparent', background: 'transparent',
border: 'none', border: 'none',
boxShadow: 'none', boxShadow: 'none',
padding: 0,
textAlign: 'right', textAlign: 'right',
padding: 0,
}} }}
onChange={(e) => { onChange={(e) => {
const updatedRoles = roles.map((role, idx) => const updatedRoles = roles.map((role, idx) =>
@@ -322,8 +323,8 @@ const RatecardDrawer = ({
<Select <Select
value={currency} value={currency}
options={[ options={[
{ value: 'LKR', label: 'LKR' },
{ value: 'USD', label: 'USD' }, { value: 'USD', label: 'USD' },
{ value: 'LKR', label: 'LKR' },
{ value: 'INR', label: 'INR' }, { value: 'INR', label: 'INR' },
]} ]}
onChange={(value) => setCurrency(value)} onChange={(value) => setCurrency(value)}
@@ -350,27 +351,7 @@ const RatecardDrawer = ({
rowKey={(record) => record.job_title_id} rowKey={(record) => record.job_title_id}
pagination={false} pagination={false}
footer={() => ( footer={() => (
isAddingRole ? ( <Button
<Select
showSearch
style={{ minWidth: 200 }}
placeholder={t('selectJobTitle')}
optionFilterProp="children"
value={selectedJobTitleId}
onChange={handleSelectJobTitle}
onBlur={() => setIsAddingRole(false)}
filterOption={(input, option) =>
(option?.children as string).toLowerCase().includes(input.toLowerCase())
}
>
{jobTitles.data?.map((jt) => (
<Select.Option key={jt.id} value={jt.id}>
{jt.name}
</Select.Option>
))}
</Select>
) : (
<Button
type="dashed" type="dashed"
onClick={handleAddRole} onClick={handleAddRole}
block block
@@ -378,7 +359,6 @@ const RatecardDrawer = ({
> >
{t('addRoleButton')} {t('addRoleButton')}
</Button> </Button>
)
)} )}
/> />
</Drawer> </Drawer>