162 lines
6.9 KiB
TypeScript
162 lines
6.9 KiB
TypeScript
|
import React, { useState } from 'react';
|
||
|
import { RadioGroup } from '@headlessui/react';
|
||
|
|
||
|
function classNames(...classes: any) {
|
||
|
return classes.filter(Boolean).join(' ');
|
||
|
}
|
||
|
|
||
|
const settings = [
|
||
|
{ name: 'Public access', description: 'This project would be available to anyone who has the link' },
|
||
|
{ name: 'Private to Project Members', description: 'Only members of this project would be able to access' },
|
||
|
{ name: 'Private to you', description: 'You are the only one able to access this project' },
|
||
|
];
|
||
|
|
||
|
export const GeneralTab = () => {
|
||
|
const [selected, setSelected] = useState(settings[0]);
|
||
|
|
||
|
return (
|
||
|
<div className="py-4">
|
||
|
<div>
|
||
|
<div className="md:grid md:grid-cols-3 md:gap-6">
|
||
|
<div className="md:col-span-1">
|
||
|
<h3 className="text-lg font-medium leading-6 text-gray-900">Privacy</h3>
|
||
|
<p className="mt-1 text-sm text-gray-500">Change your app privacy</p>
|
||
|
</div>
|
||
|
|
||
|
<div className="mt-5 md:mt-0 md:col-span-2">
|
||
|
<div className="mt-1">
|
||
|
<RadioGroup value={selected} onChange={setSelected}>
|
||
|
<RadioGroup.Label className="sr-only">Privacy setting</RadioGroup.Label>
|
||
|
<div className="bg-white rounded-md -space-y-px">
|
||
|
{settings.map((setting, settingIdx) => (
|
||
|
<RadioGroup.Option
|
||
|
key={setting.name}
|
||
|
value={setting}
|
||
|
className={({ checked }) =>
|
||
|
classNames(
|
||
|
settingIdx === 0 ? 'rounded-tl-md rounded-tr-md' : '',
|
||
|
settingIdx === settings.length - 1 ? 'rounded-bl-md rounded-br-md' : '',
|
||
|
checked ? 'bg-primary-50 border-primary-400 z-10' : 'border-gray-200',
|
||
|
'relative border p-4 flex cursor-pointer focus:outline-none',
|
||
|
)
|
||
|
}
|
||
|
>
|
||
|
{({ active, checked }) => (
|
||
|
<>
|
||
|
<span
|
||
|
className={classNames(
|
||
|
checked ? 'bg-primary-600 border-transparent' : 'bg-white border-gray-300',
|
||
|
active ? 'ring-2 ring-offset-2 ring-primary-100' : '',
|
||
|
'h-4 w-4 mt-0.5 cursor-pointer rounded-full border flex items-center justify-center',
|
||
|
)}
|
||
|
aria-hidden="true"
|
||
|
>
|
||
|
<span className="rounded-full bg-white w-1.5 h-1.5" />
|
||
|
</span>
|
||
|
<div className="ml-3 flex flex-col">
|
||
|
<RadioGroup.Label
|
||
|
as="span"
|
||
|
className={classNames(
|
||
|
checked ? 'text-primary-900' : 'text-gray-900',
|
||
|
'block text-sm font-medium',
|
||
|
)}
|
||
|
>
|
||
|
{setting.name}
|
||
|
</RadioGroup.Label>
|
||
|
<RadioGroup.Description
|
||
|
as="span"
|
||
|
className={classNames(checked ? 'text-primary-900' : 'text-gray-500', 'block text-sm')}
|
||
|
>
|
||
|
{setting.description}
|
||
|
</RadioGroup.Description>
|
||
|
</div>
|
||
|
</>
|
||
|
)}
|
||
|
</RadioGroup.Option>
|
||
|
))}
|
||
|
</div>
|
||
|
</RadioGroup>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div className="mt-10">
|
||
|
<div className="md:grid md:grid-cols-3 md:gap-6">
|
||
|
<div className="md:col-span-1">
|
||
|
<h3 className="text-lg font-medium leading-6 text-gray-900">Notifications</h3>
|
||
|
<p className="mt-1 text-sm text-gray-500">Change you notifications settings</p>
|
||
|
</div>
|
||
|
|
||
|
<div className="mt-5 md:mt-0 md:col-span-2">
|
||
|
<fieldset className="space-y-5 -mt-4">
|
||
|
<legend className="sr-only">Notifications</legend>
|
||
|
<div className="relative flex items-start">
|
||
|
<div className="flex items-center h-5">
|
||
|
<input
|
||
|
id="comments"
|
||
|
aria-describedby="comments-description"
|
||
|
name="comments"
|
||
|
type="checkbox"
|
||
|
className="focus:ring-primary-500 h-4 w-4 text-primary-600 border-gray-300 rounded"
|
||
|
/>
|
||
|
</div>
|
||
|
<div className="ml-3 text-sm">
|
||
|
<label htmlFor="comments" className="font-medium text-gray-700">
|
||
|
Comments
|
||
|
</label>
|
||
|
<p id="comments-description" className="text-gray-500">
|
||
|
Get notified when someones posts a comment on a posting.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div>
|
||
|
<div className="relative flex items-start">
|
||
|
<div className="flex items-center h-5">
|
||
|
<input
|
||
|
id="candidates"
|
||
|
aria-describedby="candidates-description"
|
||
|
name="candidates"
|
||
|
type="checkbox"
|
||
|
className="focus:ring-primary-500 h-4 w-4 text-primary-600 border-gray-300 rounded"
|
||
|
/>
|
||
|
</div>
|
||
|
<div className="ml-3 text-sm">
|
||
|
<label htmlFor="candidates" className="font-medium text-gray-700">
|
||
|
Candidates
|
||
|
</label>
|
||
|
<p id="candidates-description" className="text-gray-500">
|
||
|
Get notified when a candidate applies for a job.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div>
|
||
|
<div className="relative flex items-start">
|
||
|
<div className="flex items-center h-5">
|
||
|
<input
|
||
|
id="offers"
|
||
|
aria-describedby="offers-description"
|
||
|
name="offers"
|
||
|
type="checkbox"
|
||
|
className="focus:ring-primary-500 h-4 w-4 text-primary-600 border-gray-300 rounded"
|
||
|
/>
|
||
|
</div>
|
||
|
<div className="ml-3 text-sm">
|
||
|
<label htmlFor="offers" className="font-medium text-gray-700">
|
||
|
Offers
|
||
|
</label>
|
||
|
<p id="offers-description" className="text-gray-500">
|
||
|
Get notified when a candidate accepts or rejects an offer.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
);
|
||
|
};
|