Conversation
Add a calendar-based editor for the promotion windows carried on ProjectConfig.spec.promotionWindows and ClusterConfig.spec.promotionWindows. Windows are stored unparsed, as iCal DTSTART/DTEND plus an RFC 5545 RRULE. The UI expands them client-side with rrule and renders each occurrence on a FullCalendar week/month grid, where a drag drafts a new window and a click edits an existing one. The modal covers effect (Allow/Deny), time zone, recurrence, enablement, description and the Stage/Project selectors; a set of recipes seeds the common shapes (business hours, weekend freeze, release train, carve-out). The pages hang off the existing settings menus as nested views under Cluster Config and ProjectConfig, declared inline as children of those entries. antd's DatePicker and TimePicker are bound to dayjs by default, which would have meant a second date library alongside date-fns. Generate them over date-fns instead, so every date in this feature is a plain Date. Adds @fullcalendar/react, rrule, and rc-picker -- the last only to reach the date-fns generate config, and pinned to the version antd already resolves. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Signed-off-by: Mayursinh Sarvaiya <[email protected]>
Add an optional featureFlags object alongside extensions on the extensions context. The promotion windows subpages read it and are only declared when promotionWindows is on, so they get neither a menu entry nor a route. Nothing sets the flag in open source, so the pages stay hidden unless a distribution passes featureFlags through the extensions provider. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Signed-off-by: Mayursinh Sarvaiya <[email protected]>
Signed-off-by: Mayursinh Sarvaiya <[email protected]>
✅ Deploy Preview for docs-kargo-io ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Signed-off-by: Mayursinh Sarvaiya <[email protected]>
There was a problem hiding this comment.
I don't think it's a good idea to call it featureFlags in that case.
Can we just check if there is any extension and then show this view?
There was a problem hiding this comment.
Can we call it promotion-window-form-utils?
There was a problem hiding this comment.
I think the modal is too wide. Can we make this a bit narrower?
| <Button | ||
| icon={<FontAwesomeIcon icon={faTrash} size='sm' />} | ||
| onClick={() => labels.remove(index)} | ||
| /> |
| <Flex gap={8} justify='end'> | ||
| <Button | ||
| icon={<FontAwesomeIcon icon={faPencil} size='sm' />} | ||
| onClick={() => onEdit(promotionWindow)} | ||
| size='small' | ||
| color='default' | ||
| variant='filled' | ||
| /> | ||
| <Button | ||
| icon={<FontAwesomeIcon icon={faTrash} size='sm' />} | ||
| onClick={() => onDelete(promotionWindow)} | ||
| size='small' | ||
| color='danger' | ||
| variant='filled' | ||
| /> | ||
| </Flex> |
There was a problem hiding this comment.
Please make this consistent and add labels
| className='min-h-full' | ||
| extra={ | ||
| <Button | ||
| type='primary' |
There was a problem hiding this comment.
use default to make this consistent

No description provided.