diff --git a/models/time/src/index.ts b/models/time/src/index.ts
index 4bf2aedb54..c9eb03617a 100644
--- a/models/time/src/index.ts
+++ b/models/time/src/index.ts
@@ -236,7 +236,7 @@ export function createModel (builder: Builder): void {
}
},
label: time.string.CreateToDo,
- icon: time.icon.Target,
+ icon: time.icon.Calendar,
keyBinding: [],
input: 'none',
category: time.category.Time,
@@ -262,7 +262,7 @@ export function createModel (builder: Builder): void {
}
},
label: time.string.CreateToDo,
- icon: time.icon.Target,
+ icon: time.icon.Calendar,
keyBinding: [],
input: 'none',
category: time.category.Time,
diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss
index c8f29cd29a..832ed77c7f 100644
--- a/packages/theme/styles/_layouts.scss
+++ b/packages/theme/styles/_layouts.scss
@@ -699,6 +699,7 @@ input.search {
.min-w-8 { min-width: 2rem; }
.min-w-9 { min-width: 2.25rem; }
.min-w-12 { min-width: 3rem; }
+.min-w-28 { min-width: 7rem; }
.min-w-50 { min-width: 12.5rem; }
.min-w-60 { min-width: 15rem; }
.min-w-80 { min-width: 20rem; }
diff --git a/packages/theme/styles/_lumia-colors.scss b/packages/theme/styles/_lumia-colors.scss
index 89b5d18c54..40b1b69613 100644
--- a/packages/theme/styles/_lumia-colors.scss
+++ b/packages/theme/styles/_lumia-colors.scss
@@ -26,6 +26,7 @@
--button-negative-active-BackgroundColor: #c42a32;
--tag-on-accent-PorpoiseText: #FFFFFF;
+ --tag-accent-SunshineBackground: #FFBD2E;
}
/* Dark Theme */
@@ -70,6 +71,8 @@
--tag-on-subtle-PorpoiseText: #F2F4F6;
--tag-subtle-PorpoiseBackground: #343F49;
+ --tag-nuance-SunshineBackground: #262F40;
+ --tag-accent-SunshineText: #FFBD2E;
--tag-nuance-SkyBackground: #1F2737;
--icon-disabled-IconColor: #394358;
@@ -145,6 +148,8 @@
--tag-on-subtle-PorpoiseText: #293139;
--tag-subtle-PorpoiseBackground: #C8D1D9;
+ --tag-nuance-SunshineBackground: #FEF2E2;
+ --tag-accent-SunshineText: #8E5E00;
--tag-nuance-SkyBackground: #EEF4FD;
--icon-disabled-IconColor: #B3BCCC;
diff --git a/packages/theme/styles/common.scss b/packages/theme/styles/common.scss
index 8555182d4a..3eda4b5776 100644
--- a/packages/theme/styles/common.scss
+++ b/packages/theme/styles/common.scss
@@ -14,9 +14,11 @@
//
/* Typography */
+.font-regular-11,
.font-medium-11,
.font-regular-12,
.font-medium-12,
+.font-caps-medium-12,
.font-bold-12,
.font-regular-14,
.font-medium-14,
@@ -30,11 +32,13 @@
line-height: 1rem;
color: var(--global-primary-TextColor);
}
+.font-regular-11,
.font-medium-11 {
font-size: 0.6875rem;
}
.font-regular-12,
.font-medium-12,
+.font-caps-medium-12,
.font-bold-12 {
font-size: 0.75rem;
}
@@ -44,6 +48,7 @@
.paragraph-regular-14 {
font-size: 0.875rem;
}
+.font-regular-11,
.font-regular-12,
.font-regular-14,
.paragraph-regular-14 {
@@ -51,6 +56,7 @@
}
.font-medium-11,
.font-medium-12,
+.font-caps-medium-12,
.font-medium-14,
.heading-medium-16,
.heading-medium-20 {
@@ -74,6 +80,9 @@
line-height: 1.25rem;
color: var(--global-tertiary-TextColor);
}
+.font-caps-medium-12 {
+ text-transform: uppercase;
+}
/* Panels */
* {
diff --git a/packages/ui/src/components/ButtonBase.svelte b/packages/ui/src/components/ButtonBase.svelte
index c5a36ba6b9..5197c0c2d9 100644
--- a/packages/ui/src/components/ButtonBase.svelte
+++ b/packages/ui/src/components/ButtonBase.svelte
@@ -120,6 +120,9 @@
}
.icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
width: var(--spacing-2_5);
height: var(--spacing-2_5);
@@ -159,10 +162,11 @@
}
&.small {
height: var(--global-small-Size);
+ gap: var(--spacing-0_25);
border-radius: var(--small-BorderRadius);
&.type-button {
- padding: 0 var(--spacing-1_5);
+ padding: 0 var(--spacing-1);
}
&.type-button-icon {
width: var(--global-small-Size);
@@ -363,6 +367,7 @@
}
}
}
+
& > * {
pointer-events: none;
}
diff --git a/packages/ui/src/components/Hotkey.svelte b/packages/ui/src/components/Hotkey.svelte
new file mode 100644
index 0000000000..68e9b6d35c
--- /dev/null
+++ b/packages/ui/src/components/Hotkey.svelte
@@ -0,0 +1,50 @@
+
+
+
+
+ {#if isPredefinedKey}
+
+ {:else}
+ {key}
+ {/if}
+
+
+
diff --git a/packages/ui/src/components/HotkeyGroup.svelte b/packages/ui/src/components/HotkeyGroup.svelte
new file mode 100644
index 0000000000..067f59e89f
--- /dev/null
+++ b/packages/ui/src/components/HotkeyGroup.svelte
@@ -0,0 +1,25 @@
+
+
+
+
+ {#each keys as key}
+
+ {/each}
+
diff --git a/packages/ui/src/components/icons/KeyCommand.svelte b/packages/ui/src/components/icons/KeyCommand.svelte
new file mode 100644
index 0000000000..9a4fa894b5
--- /dev/null
+++ b/packages/ui/src/components/icons/KeyCommand.svelte
@@ -0,0 +1,12 @@
+
+
+
diff --git a/packages/ui/src/components/icons/KeyOption.svelte b/packages/ui/src/components/icons/KeyOption.svelte
new file mode 100644
index 0000000000..4403c6a34f
--- /dev/null
+++ b/packages/ui/src/components/icons/KeyOption.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/packages/ui/src/components/icons/KeyShift.svelte b/packages/ui/src/components/icons/KeyShift.svelte
new file mode 100644
index 0000000000..b95eb9cf98
--- /dev/null
+++ b/packages/ui/src/components/icons/KeyShift.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index a8ade2b7a2..e2c4e5c75b 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -141,6 +141,8 @@ export { default as NavGroup } from './components/NavGroup.svelte'
export { default as Modal } from './components/Modal.svelte'
export { default as AccordionItem } from './components/AccordionItem.svelte'
export { default as NotificationToast } from './components/NotificationToast.svelte'
+export { default as Hotkey } from './components/Hotkey.svelte'
+export { default as HotkeyGroup } from './components/HotkeyGroup.svelte'
export { default as IconAdd } from './components/icons/Add.svelte'
export { default as IconCircleAdd } from './components/icons/CircleAdd.svelte'
@@ -213,6 +215,9 @@ export { default as IconTableOfContents } from './components/icons/TableOfConten
export { default as IconRight } from './components/icons/Right.svelte'
export { default as IconDropdownDown } from './components/icons/DropdownDown.svelte'
export { default as IconDropdownRight } from './components/icons/DropdownRight.svelte'
+export { default as IconKeyCommand } from './components/icons/KeyCommand.svelte'
+export { default as IconKeyOption } from './components/icons/KeyOption.svelte'
+export { default as IconKeyShift } from './components/icons/KeyShift.svelte'
export { default as PanelInstance } from './components/PanelInstance.svelte'
export { default as Panel } from './components/Panel.svelte'
diff --git a/plugins/calendar-resources/src/components/DateEditor.svelte b/plugins/calendar-resources/src/components/DateEditor.svelte
index 54e763b9db..7556944814 100644
--- a/plugins/calendar-resources/src/components/DateEditor.svelte
+++ b/plugins/calendar-resources/src/components/DateEditor.svelte
@@ -14,9 +14,9 @@
-->
-
-
-
-
+
-
-
-
+
—
-
+
-
-
-
-
-
@@ -44,4 +39,7 @@
+
+
+
diff --git a/plugins/time-assets/lang/en.json b/plugins/time-assets/lang/en.json
index f737e6f64f..bc528964a2 100644
--- a/plugins/time-assets/lang/en.json
+++ b/plugins/time-assets/lang/en.json
@@ -55,6 +55,7 @@
"CreatedToDo": "Created Todo",
"NewToDoDetails": "New Todo: {details}",
"MarkedAsDone": "Completed",
- "WorkSchedule": "Work schedule"
+ "WorkSchedule": "Work schedule",
+ "SummaryDuration": "Summary"
}
}
diff --git a/plugins/time-assets/lang/es.json b/plugins/time-assets/lang/es.json
index 272be448b1..a651b4aeb0 100644
--- a/plugins/time-assets/lang/es.json
+++ b/plugins/time-assets/lang/es.json
@@ -55,6 +55,7 @@
"CreatedToDo": "Tarea creada",
"NewToDoDetails": "Nueva tarea pendiente: {details}",
"MarkedAsDone": "Marcado como hecho",
- "WorkSchedule": "Horario de trabajo"
+ "WorkSchedule": "Horario de trabajo",
+ "SummaryDuration": "Sumerio"
}
}
\ No newline at end of file
diff --git a/plugins/time-assets/lang/pt.json b/plugins/time-assets/lang/pt.json
index 932d09c71f..37907f82c5 100644
--- a/plugins/time-assets/lang/pt.json
+++ b/plugins/time-assets/lang/pt.json
@@ -55,6 +55,7 @@
"CreatedToDo": "Tarefa criada",
"NewToDoDetails": "Nova tarefa pendente: {details}",
"MarkedAsDone": "Concluído",
- "WorkSchedule": "Horário de trabalho"
+ "WorkSchedule": "Horário de trabalho",
+ "SummaryDuration": "Sumário"
}
}
\ No newline at end of file
diff --git a/plugins/time-assets/lang/ru.json b/plugins/time-assets/lang/ru.json
index 6c9704de6b..0517de4f00 100644
--- a/plugins/time-assets/lang/ru.json
+++ b/plugins/time-assets/lang/ru.json
@@ -55,6 +55,7 @@
"CreatedToDo": "Создал(а) Todo",
"NewToDoDetails": "Новое Todo: {details}",
"MarkedAsDone": "Выполнено",
- "WorkSchedule": "Расписание работы"
+ "WorkSchedule": "Расписание работы",
+ "SummaryDuration": "Всего"
}
}
diff --git a/plugins/time-assets/src/index.ts b/plugins/time-assets/src/index.ts
index 1d3dcc7a36..a0da35c83d 100644
--- a/plugins/time-assets/src/index.ts
+++ b/plugins/time-assets/src/index.ts
@@ -21,7 +21,7 @@ loadMetadata(time.icon, {
Team: `${icons}#team`,
Hashtag: `${icons}#hashtag`,
Inbox: `${icons}#inbox`,
- Target: `${icons}#target`,
+ Calendar: `${icons}#calendar`,
Flag: `${icons}#flag`,
FilledFlag: `${icons}#filledFlag`,
Planned: `${icons}#planned`,
diff --git a/plugins/time-resources/src/components/CreateToDoPopup.svelte b/plugins/time-resources/src/components/CreateToDoPopup.svelte
index 23f3cfd136..633d46179d 100644
--- a/plugins/time-resources/src/components/CreateToDoPopup.svelte
+++ b/plugins/time-resources/src/components/CreateToDoPopup.svelte
@@ -13,22 +13,22 @@
// limitations under the License.
-->
-
+ }
+
+
+
diff --git a/plugins/time-resources/src/components/EditToDo.svelte b/plugins/time-resources/src/components/EditToDo.svelte
index e5b0e5429c..330ddbbfd7 100644
--- a/plugins/time-resources/src/components/EditToDo.svelte
+++ b/plugins/time-resources/src/components/EditToDo.svelte
@@ -190,8 +190,8 @@
{/if}
-
-
+
+
@@ -235,9 +235,8 @@
}
.slots-content {
gap: var(--spacing-2);
- padding: var(--spacing-3) var(--spacing-4);
+ padding: var(--spacing-2) var(--spacing-4);
border-top: 1px solid var(--theme-divider-color);
- border-bottom: 1px solid var(--theme-divider-color);
}
.eventPopup-container {
display: flex;
diff --git a/plugins/time-resources/src/components/PriorityEditor.svelte b/plugins/time-resources/src/components/PriorityEditor.svelte
index 74e264d2bc..fc617904f0 100644
--- a/plugins/time-resources/src/components/PriorityEditor.svelte
+++ b/plugins/time-resources/src/components/PriorityEditor.svelte
@@ -46,7 +46,7 @@
}
})
$: selected = selectPopupPriorities.find((item) => item.id === value)
- $: selectedLabel = selected?.label ?? time.string.NoPriority
+ $: selectedLabel = selected?.label === time.string.NoPriority ? time.string.SetPriority : selected?.label
$: icon = selected?.id === ToDoPriority.NoPriority ? time.icon.Flag : selected?.icon
$: iconProps = selected?.iconProps
diff --git a/plugins/time-resources/src/components/ToDoDuration.svelte b/plugins/time-resources/src/components/ToDoDuration.svelte
index 77ad0ada9f..11e739a37f 100644
--- a/plugins/time-resources/src/components/ToDoDuration.svelte
+++ b/plugins/time-resources/src/components/ToDoDuration.svelte
@@ -1,35 +1,14 @@
-{res}
+{duration}
diff --git a/plugins/time-resources/src/components/Workslots.svelte b/plugins/time-resources/src/components/Workslots.svelte
index 4260c83197..db8b41037a 100644
--- a/plugins/time-resources/src/components/Workslots.svelte
+++ b/plugins/time-resources/src/components/Workslots.svelte
@@ -13,15 +13,31 @@
// limitations under the License.
-->
-
-
- {#each slots as slot}
-
-
change(e, slot)}
- on:dueChange={(e) => dueChange(e, slot)}
+
+
+
+ {#each slots as slot, i}
+
+
+
change(e, slot)}
+ on:dueChange={(e) => dueChange(e, slot)}
+ />
+
- {/each}
-
-
-
-
-
+ {/each}
+
+
+
dispatch('create')}
+ >
+ {#if shortcuts}
+
+ {/if}
+
+ {#if duration}
+
+ :
+
+ {duration}
+
+ {/if}
diff --git a/plugins/time-resources/src/plugin.ts b/plugins/time-resources/src/plugin.ts
index 3b8883b9a2..b333d54781 100644
--- a/plugins/time-resources/src/plugin.ts
+++ b/plugins/time-resources/src/plugin.ts
@@ -61,6 +61,7 @@ export default mergeIds(timeId, time, {
AddTo: '' as IntlString,
AddTitle: '' as IntlString,
MyWork: '' as IntlString,
- WorkSchedule: '' as IntlString
+ WorkSchedule: '' as IntlString,
+ SummaryDuration: '' as IntlString
}
})
diff --git a/plugins/time-resources/src/utils.ts b/plugins/time-resources/src/utils.ts
index dd703e8ede..499e80ae22 100644
--- a/plugins/time-resources/src/utils.ts
+++ b/plugins/time-resources/src/utils.ts
@@ -1,6 +1,9 @@
-import type { Client, Ref } from '@hcengineering/core'
-import type { DefSeparators } from '@hcengineering/ui'
import type { WorkSlot, ToDo } from '@hcengineering/time'
+import type { DefSeparators } from '@hcengineering/ui'
+import type { Client, Ref } from '@hcengineering/core'
+import { DAY, HOUR, MINUTE } from '@hcengineering/ui'
+import { translate } from '@hcengineering/platform'
+import timePlugin from './plugin'
import time from '@hcengineering/time'
export * from './types'
@@ -36,3 +39,46 @@ export async function ToDoTitleProvider (client: Client, ref: Ref
, doc?: T
return object.title
}
+
+export function calculateEventsDuration (events: WorkSlot[]): number {
+ const points = events.flatMap((event) => [
+ { time: event.date, type: 'start' },
+ { time: event.dueDate, type: 'end' }
+ ])
+
+ points.sort((a, b) => a.time - b.time)
+
+ let activeEvents = 0
+ let duration = 0
+ let lastTime = 0
+
+ points.forEach((point) => {
+ if (activeEvents > 0) {
+ duration += point.time - lastTime
+ }
+ activeEvents += point.type === 'start' ? 1 : -1
+ lastTime = point.time
+ })
+
+ return duration
+}
+
+export async function formatEventsDuration (duration: number, language: string): Promise {
+ let text = ''
+ const days = Math.floor(duration / DAY)
+ if (days > 0) {
+ text += await translate(timePlugin.string.Days, { days }, language)
+ }
+ const hours = Math.floor((duration % DAY) / HOUR)
+ if (hours > 0) {
+ text += ' '
+ text += await translate(timePlugin.string.Hours, { hours }, language)
+ }
+ const minutes = Math.floor((duration % HOUR) / MINUTE)
+ if (minutes > 0) {
+ text += ' '
+ text += await translate(timePlugin.string.Minutes, { minutes }, language)
+ }
+ text = text.trim()
+ return text
+}
diff --git a/plugins/time/src/index.ts b/plugins/time/src/index.ts
index b1bcf69018..734a768ea8 100644
--- a/plugins/time/src/index.ts
+++ b/plugins/time/src/index.ts
@@ -13,12 +13,12 @@
// limitations under the License.
//
-import { Event, Visibility } from '@hcengineering/calendar'
-import { Person } from '@hcengineering/contact'
-import { AttachedDoc, Class, Doc, Hierarchy, Markup, Mixin, Ref, Space, Timestamp, Type } from '@hcengineering/core'
import type { Asset, Plugin, Resource } from '@hcengineering/platform'
+import { AttachedDoc, Class, Doc, Hierarchy, Markup, Mixin, Ref, Space, Timestamp, Type } from '@hcengineering/core'
import { IntlString, plugin } from '@hcengineering/platform'
+import { Event, Visibility } from '@hcengineering/calendar'
import { AnyComponent } from '@hcengineering/ui'
+import { Person } from '@hcengineering/contact'
/**
* @public
@@ -120,7 +120,7 @@ export default plugin(timeId, {
Team: '' as Asset,
Hashtag: '' as Asset,
Inbox: '' as Asset,
- Target: '' as Asset,
+ Calendar: '' as Asset,
Flag: '' as Asset,
FilledFlag: '' as Asset,
Planned: '' as Asset,
diff --git a/tests/create-local.sh b/tests/create-local.sh
index f57a9dff0d..7befb98d94 100755
--- a/tests/create-local.sh
+++ b/tests/create-local.sh
@@ -1,5 +1,5 @@
# Create workspace record in accounts
-./tool-local.sh create-workspace sanity-ws -o SanityTest
+./tool-local.sh create-workspace sanity-ws -w SanityTest
# Create user record in accounts
./tool-local.sh create-account user1 -f John -l Appleseed -p 1234
./tool-local.sh confirm-email user1
diff --git a/tests/sanity/tests/model/planning/planning-page.ts b/tests/sanity/tests/model/planning/planning-page.ts
index 67860c6538..81318a8bd8 100644
--- a/tests/sanity/tests/model/planning/planning-page.ts
+++ b/tests/sanity/tests/model/planning/planning-page.ts
@@ -40,8 +40,12 @@ export class PlanningPage extends CalendarPage {
this.inputPopupCreateTitle = page.locator('div.popup input')
this.inputPopupCreateDescription = page.locator('div.popup div.tiptap')
this.inputPanelCreateDescription = page.locator('div.hulyModal-container div.tiptap')
- this.buttonPopupCreateDueDate = page.locator('div.popup button.antiButton', { hasText: 'Due date' })
- this.buttonPanelCreateDueDate = page.locator('div.hulyModal-container button.antiButton', { hasText: 'Due date' })
+ this.buttonPopupCreateDueDate = page.locator(
+ 'div.popup div.block:first-child div.flex-row-center button:nth-child(3)'
+ )
+ this.buttonPanelCreateDueDate = page.locator(
+ 'div.hulyModal-container div.slots-content div.flex-row-top.justify-between div.flex-row-center button:first-child'
+ )
this.buttonPopupCreatePriority = page.locator('div.popup button#priorityButton')
this.buttonPanelCreatePriority = page.locator('div.hulyModal-container button#priorityButton')
this.buttonPopupCreateVisible = page.locator('div.popup button.type-button.menu', { hasText: 'visible' })
@@ -50,8 +54,8 @@ export class PlanningPage extends CalendarPage {
})
this.buttonPopupCreateAddLabel = page.locator('div.popup button.antiButton', { hasText: 'Add label' })
this.buttonPanelCreateAddLabel = page.locator('.hulyHeader-titleGroup > button:nth-child(2)')
- this.buttonPopupCreateAddSlot = page.locator('div.popup button.antiButton', { hasText: 'Add Slot' })
- this.buttonPanelCreateAddSlot = page.locator('div.hulyModal-container button.antiButton', { hasText: 'Add Slot' })
+ this.buttonPopupCreateAddSlot = page.locator('div.popup button', { hasText: 'Add Slot' })
+ this.buttonPanelCreateAddSlot = page.locator('div.hulyModal-container button', { hasText: 'Add Slot' })
this.buttonCalendarToday = page.locator('div.popup div.calendar button.day.today')
this.buttonCreateToDo = page.locator('div.popup button.antiButton', { hasText: 'Add ToDo' })
this.inputCreateToDoTitle = page.locator('div.toDos-container input[placeholder="Add todo, press Enter to save"]')
@@ -63,7 +67,7 @@ export class PlanningPage extends CalendarPage {
)
this.textPanelToDoDescription = page.locator('div.hulyModal-container div.top-content div.tiptap > p')
this.textPanelDueDate = page.locator(
- 'div.hulyModal-container div.slots-content div.flex-row-top.justify-between div.flex-row-center button.antiButton:first-child div[slot="content"]'
+ 'div.hulyModal-container div.slots-content div.flex-row-top.justify-between div.flex-row-center button:first-child span'
)
this.textPanelPriority = page.locator('div.hulyModal-container button#priorityButton svg')
this.textPanelVisible = page.locator(
@@ -133,12 +137,12 @@ export class PlanningPage extends CalendarPage {
public async setTimeSlot (rowNumber: number, slot: Slot, popup: boolean = false): Promise {
const p = popup
- ? 'div.popup div.horizontalBox div.flex-row-center'
- : 'div.hulyModal-container div.slots-content div.horizontalBox div.flex-row-center'
+ ? 'div.popup div.horizontalBox div.end div.flex-col div.flex'
+ : 'div.hulyModal-container div.slots-content div.flex-col div.flex'
const row = this.page.locator(p).nth(rowNumber)
// dateStart
- await row.locator('div.dateEditor-container:nth-child(2) button:first-child').click()
+ await row.locator('div.dateEditor-container:nth-child(1) button:first-child').click()
if (slot.dateStart === 'today') {
await this.buttonCalendarToday.click()
} else {
@@ -154,34 +158,34 @@ export class PlanningPage extends CalendarPage {
const hours = slot.timeStart.substring(0, 2)
const minutes = slot.timeStart.substring(2, slot.timeStart.length)
await row
- .locator('div.dateEditor-container:nth-child(2) button:last-child span.digit:first-child')
+ .locator('div.dateEditor-container:nth-child(1) button:last-child span.digit:first-child')
.click({ delay: 200 })
await row
- .locator('div.dateEditor-container:nth-child(2) button:last-child span.digit:first-child')
+ .locator('div.dateEditor-container:nth-child(1) button:last-child span.digit:first-child')
.pressSequentially(hours, { delay: 100 })
await row
- .locator('div.dateEditor-container:nth-child(2) button:last-child span.digit:last-child')
+ .locator('div.dateEditor-container:nth-child(1) button:last-child span.digit:last-child')
.click({ delay: 200 })
await row
- .locator('div.dateEditor-container:nth-child(2) button:last-child span.digit:last-child')
+ .locator('div.dateEditor-container:nth-child(1) button:last-child span.digit:last-child')
.pressSequentially(minutes, { delay: 100 })
// dateEnd + timeEnd
- await row.locator('div.dateEditor-container:nth-child(4) button').click()
+ await row.locator('div.dateEditor-container.difference button').click()
await this.fillSelectDatePopup(slot.dateEnd.day, slot.dateEnd.month, slot.dateEnd.year, slot.timeEnd)
}
private async checkTimeSlot (rowNumber: number, slot: Slot, popup: boolean = false): Promise {
const p = popup
- ? 'div.popup div.horizontalBox div.flex-row-center'
- : 'div.hulyModal-container div.slots-content div.horizontalBox div.flex-row-center'
+ ? 'div.popup div.horizontalBox div.end div.flex-col div.flex'
+ : 'div.hulyModal-container div.slots-content div.flex-col div.flex'
const row = this.page.locator(p).nth(rowNumber)
// timeStart
- await expect(row.locator('div.dateEditor-container:nth-child(2) button:last-child div.datetime-input')).toHaveText(
+ await expect(row.locator('div.dateEditor-container:nth-child(1) button:last-child div.datetime-input')).toHaveText(
slot.timeStart
)
// timeEnd
- await expect(row.locator('div.dateEditor-container:nth-child(4) button > div:first-child')).toHaveText(slot.timeEnd)
+ await expect(row.locator('div.dateEditor-container.difference button > div:first-child')).toHaveText(slot.timeEnd)
}
async openToDoByName (toDoName: string): Promise {
@@ -255,18 +259,17 @@ export class PlanningPage extends CalendarPage {
}
public async deleteTimeSlot (rowNumber: number): Promise {
- const row = this.page.locator('div.hulyModal-container div.slots-content div.horizontalBox div.tool').nth(rowNumber)
+ const row = this.page
+ .locator('div.hulyModal-container div.slots-content div.flex-col div.flex div.tool')
+ .nth(rowNumber)
await row.locator('xpath=..').hover()
await row.locator('button').click()
- await expect(row.locator('button')).toBeHidden()
await this.pressYesDeletePopup(this.page)
}
public async checkTimeSlotEndDate (rowNumber: number, dateEnd: string): Promise {
- const row = this.page
- .locator('div.hulyModal-container div.slots-content div.horizontalBox div.flex-row-center')
- .nth(rowNumber)
+ const row = this.page.locator('div.hulyModal-container div.slots-content div.flex-col div.flex').nth(rowNumber)
// dateEnd
- await expect(row.locator('div.dateEditor-container:nth-child(2) button:first-child')).toContainText(dateEnd)
+ await expect(row.locator('div.dateEditor-container:nth-child(1) button:first-child')).toContainText(dateEnd)
}
}