TemplatesList.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { noop } from 'lodash'
  2. import { Menu } from 'ui'
  3. import { PolicyTemplate } from './PolicyTemplates.constants'
  4. interface TemplatesListProps {
  5. templates: PolicyTemplate[]
  6. templatesNote: string
  7. selectedTemplate: PolicyTemplate
  8. setSelectedTemplate: (template: PolicyTemplate) => void
  9. }
  10. const TemplatesList = ({
  11. templates = [],
  12. templatesNote = '',
  13. selectedTemplate,
  14. setSelectedTemplate = noop,
  15. }: TemplatesListProps) => (
  16. <div className="flex flex-col justify-between border-r border-default w-full">
  17. <div
  18. className="hide-scrollbar divide-border-primary space-y-0 divide-y divide-solid overflow-y-auto"
  19. style={{ maxHeight: '24rem' }}
  20. >
  21. <Menu type="border">
  22. {templates.map((template, i) => {
  23. const active = selectedTemplate?.id === template?.id
  24. return (
  25. <div
  26. key={i}
  27. className={
  28. 'border-b border-overlay hover:bg-surface-200 ' + (active ? 'bg-surface-300' : '')
  29. }
  30. >
  31. <Menu.Item
  32. key={template.id}
  33. active={active}
  34. onClick={() => setSelectedTemplate(template)}
  35. >
  36. <div className="truncate py-2">{template.templateName}</div>
  37. </Menu.Item>
  38. </div>
  39. )
  40. })}
  41. </Menu>
  42. </div>
  43. {templatesNote && (
  44. <div className="px-4 py-2">
  45. <p className="text-xs text-foreground-lighter">{templatesNote}</p>
  46. </div>
  47. )}
  48. </div>
  49. )
  50. export default TemplatesList