mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-17 12:42:15 +01:00
update dependencies, update eslint config, update optional ts props types
This commit is contained in:
@@ -151,7 +151,7 @@ const page = usePage<{
|
||||
</InputLabel>
|
||||
</div>
|
||||
|
||||
<div class="mt-4" v-if="page.props.newsletter_consent">
|
||||
<div v-if="page.props.newsletter_consent" class="mt-4">
|
||||
<InputLabel for="newsletter_consent">
|
||||
<div class="flex items-center">
|
||||
<Checkbox
|
||||
|
||||
@@ -74,7 +74,7 @@ function refreshDashboardData() {
|
||||
<MainContainer
|
||||
class="grid gap-5 sm:gap-6 grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 pt-3 sm:pt-5 pb-4 sm:pb-6 border-b border-default-background-separator items-stretch">
|
||||
<RecentlyTrackedTasksCard
|
||||
:latestTasks="props.latestTasks"></RecentlyTrackedTasksCard>
|
||||
:latest-tasks="props.latestTasks"></RecentlyTrackedTasksCard>
|
||||
<LastSevenDaysCard
|
||||
:last7-days="props.lastSevenDays"></LastSevenDaysCard>
|
||||
<ActivityGraphCard
|
||||
@@ -84,13 +84,13 @@ function refreshDashboardData() {
|
||||
<TeamActivityCard
|
||||
v-if="canViewMembers()"
|
||||
class="flex lg:hidden xl:flex"
|
||||
:latestTeamActivity="
|
||||
:latest-team-activity="
|
||||
props.latestTeamActivity
|
||||
"></TeamActivityCard>
|
||||
</MainContainer>
|
||||
<MainContainer class="py-5">
|
||||
<ThisWeekOverview
|
||||
:weeklyProjectOverview="props.weeklyProjectOverview"
|
||||
:weekly-project-overview="props.weeklyProjectOverview"
|
||||
:total-weekly-billable-amount="props.totalWeeklyBillableAmount"
|
||||
:total-weekly-billable-time="props.totalWeeklyBillableTime"
|
||||
:total-weekly-time="props.totalWeeklyTime"
|
||||
|
||||
@@ -52,8 +52,8 @@ function isActiveTab(tab: string) {
|
||||
>Invite member</SecondaryButton
|
||||
>
|
||||
<MemberInviteModal
|
||||
:available-roles="availableRoles"
|
||||
v-model:show="inviteMember"
|
||||
:available-roles="availableRoles"
|
||||
@close="activeTab = 'invitations'"></MemberInviteModal>
|
||||
</MainContainer>
|
||||
<MemberTable v-if="activeTab === 'all'"></MemberTable>
|
||||
|
||||
@@ -204,9 +204,9 @@ const page = usePage<{
|
||||
<div class="col-span-6 sm:col-span-4">
|
||||
<InputLabel for="timezone" value="Timezone" />
|
||||
<select
|
||||
name="timezone"
|
||||
id="timezone"
|
||||
v-model="form.timezone"
|
||||
name="timezone"
|
||||
required
|
||||
class="mt-1 block w-full border-input-border bg-input-background text-white focus:border-input-border-active rounded-md shadow-sm">
|
||||
<option value="" disabled>Select a Timezone</option>
|
||||
@@ -225,9 +225,9 @@ const page = usePage<{
|
||||
<div class="col-span-6 sm:col-span-4">
|
||||
<InputLabel for="week_start" value="Start of the week" />
|
||||
<select
|
||||
name="week_start"
|
||||
id="week_start"
|
||||
v-model="form.week_start"
|
||||
name="week_start"
|
||||
required
|
||||
class="mt-1 block w-full border-input-border bg-input-background text-white focus:border-input-border-active rounded-md shadow-sm">
|
||||
<option value="" disabled>Select a week day</option>
|
||||
|
||||
@@ -129,15 +129,15 @@ const shownTasks = computed(() => {
|
||||
</nav>
|
||||
<div>
|
||||
<SecondaryButton
|
||||
v-if="canCreateProjects()"
|
||||
:icon="PencilSquareIcon"
|
||||
@click="showEditProjectModal = true"
|
||||
v-if="canCreateProjects()">
|
||||
@click="showEditProjectModal = true">
|
||||
Edit Project
|
||||
</SecondaryButton>
|
||||
<ProjectEditModal
|
||||
v-if="project"
|
||||
:originalProject="project"
|
||||
v-model:show="showEditProjectModal"></ProjectEditModal>
|
||||
v-model:show="showEditProjectModal"
|
||||
:original-project="project"></ProjectEditModal>
|
||||
</div>
|
||||
</MainContainer>
|
||||
<MainContainer>
|
||||
@@ -168,8 +168,8 @@ const shownTasks = computed(() => {
|
||||
>Create Task
|
||||
</SecondaryButton>
|
||||
<TaskCreateModal
|
||||
:project-id="projectId"
|
||||
v-model:show="createTask"></TaskCreateModal>
|
||||
v-model:show="createTask"
|
||||
:project-id="projectId"></TaskCreateModal>
|
||||
</div>
|
||||
</template>
|
||||
</CardTitle>
|
||||
@@ -188,11 +188,11 @@ const shownTasks = computed(() => {
|
||||
Add Member
|
||||
</SecondaryButton>
|
||||
<ProjectMemberCreateModal
|
||||
:project-id="projectId"
|
||||
:existing-members="projectMembers"
|
||||
v-model:show="
|
||||
createProjectMember
|
||||
"></ProjectMemberCreateModal>
|
||||
"
|
||||
:project-id="projectId"
|
||||
:existing-members="projectMembers"></ProjectMemberCreateModal>
|
||||
</template>
|
||||
</CardTitle>
|
||||
<Card>
|
||||
|
||||
@@ -94,13 +94,13 @@ const showBillableRate = computed(() => {
|
||||
>Create Project
|
||||
</SecondaryButton>
|
||||
<ProjectCreateModal
|
||||
:createProject
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction"
|
||||
:createClient
|
||||
v-model:show="showCreateProjectModal"
|
||||
:create-project
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction"
|
||||
:create-client
|
||||
:currency="getOrganizationCurrencyString()"
|
||||
:clients="clients"
|
||||
@submit="createProject"
|
||||
v-model:show="showCreateProjectModal"></ProjectCreateModal>
|
||||
@submit="createProject"></ProjectCreateModal>
|
||||
</MainContainer>
|
||||
<ProjectTable
|
||||
:show-billable-rate="showBillableRate"
|
||||
|
||||
@@ -281,7 +281,7 @@ const tableData = computed(() => {
|
||||
class="overflow-hidden">
|
||||
<ReportingExportModal
|
||||
v-model:show="showExportModal"
|
||||
:exportUrl="exportUrl"></ReportingExportModal>
|
||||
:export-url="exportUrl"></ReportingExportModal>
|
||||
<MainContainer
|
||||
class="py-3 sm:py-5 border-b border-default-background-separator flex justify-between items-center">
|
||||
<div class="flex items-center space-x-3 sm:space-x-6">
|
||||
@@ -292,7 +292,7 @@ const tableData = computed(() => {
|
||||
<ReportingExportButton
|
||||
:download="downloadExport"></ReportingExportButton>
|
||||
<ReportSaveButton
|
||||
:reportProperties="reportProperties"></ReportSaveButton>
|
||||
:report-properties="reportProperties"></ReportSaveButton>
|
||||
</div>
|
||||
</MainContainer>
|
||||
<div class="py-2.5 w-full border-b border-default-background-separator">
|
||||
@@ -302,9 +302,9 @@ const tableData = computed(() => {
|
||||
class="flex flex-wrap items-center space-y-2 sm:space-y-0 space-x-4">
|
||||
<div class="text-sm font-medium">Filters</div>
|
||||
<MemberMultiselectDropdown
|
||||
@submit="updateReporting"
|
||||
v-model="selectedMembers">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedMembers"
|
||||
@submit="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedMembers.length"
|
||||
:active="selectedMembers.length > 0"
|
||||
@@ -313,9 +313,9 @@ const tableData = computed(() => {
|
||||
</template>
|
||||
</MemberMultiselectDropdown>
|
||||
<ProjectMultiselectDropdown
|
||||
@submit="updateReporting"
|
||||
v-model="selectedProjects">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedProjects"
|
||||
@submit="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedProjects.length"
|
||||
:active="selectedProjects.length > 0"
|
||||
@@ -324,9 +324,9 @@ const tableData = computed(() => {
|
||||
</template>
|
||||
</ProjectMultiselectDropdown>
|
||||
<TaskMultiselectDropdown
|
||||
@submit="updateReporting"
|
||||
v-model="selectedTasks">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedTasks"
|
||||
@submit="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedTasks.length"
|
||||
:active="selectedTasks.length > 0"
|
||||
@@ -335,20 +335,20 @@ const tableData = computed(() => {
|
||||
</template>
|
||||
</TaskMultiselectDropdown>
|
||||
<ClientMultiselectDropdown
|
||||
@submit="updateReporting"
|
||||
v-model="selectedClients">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedClients"
|
||||
@submit="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
title="Clients"
|
||||
:icon="FolderIcon"></ReportingFilterBadge>
|
||||
</template>
|
||||
</ClientMultiselectDropdown>
|
||||
<TagDropdown
|
||||
@submit="updateReporting"
|
||||
:createTag
|
||||
v-model="selectedTags"
|
||||
:tags="tags">
|
||||
<template v-slot:trigger>
|
||||
:create-tag
|
||||
:tags="tags"
|
||||
@submit="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedTags.length"
|
||||
:active="selectedTags.length > 0"
|
||||
@@ -358,7 +358,6 @@ const tableData = computed(() => {
|
||||
</TagDropdown>
|
||||
|
||||
<SelectDropdown
|
||||
@changed="updateReporting"
|
||||
v-model="billable"
|
||||
:get-key-from-item="(item) => item.value"
|
||||
:get-name-for-item="(item) => item.label"
|
||||
@@ -375,8 +374,9 @@ const tableData = computed(() => {
|
||||
label: 'Non Billable',
|
||||
value: 'false',
|
||||
},
|
||||
]">
|
||||
<template v-slot:trigger>
|
||||
]"
|
||||
@changed="updateReporting">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:active="billable !== null"
|
||||
:title="
|
||||
@@ -399,8 +399,8 @@ const tableData = computed(() => {
|
||||
<MainContainer>
|
||||
<div class="pt-10 w-full px-3 relative">
|
||||
<ReportingChart
|
||||
:groupedType="aggregatedGraphTimeEntries?.grouped_type"
|
||||
:groupedData="
|
||||
:grouped-type="aggregatedGraphTimeEntries?.grouped_type"
|
||||
:grouped-data="
|
||||
aggregatedGraphTimeEntries?.grouped_data
|
||||
"></ReportingChart>
|
||||
</div>
|
||||
@@ -413,18 +413,18 @@ const tableData = computed(() => {
|
||||
class="text-sm flex text-white items-center space-x-3 font-medium px-6 border-b border-card-background-separator pb-3">
|
||||
<span>Group by</span>
|
||||
<ReportingGroupBySelect
|
||||
v-model="group"
|
||||
:group-by-options="groupByOptions"
|
||||
@changed="updateTableReporting"
|
||||
v-model="group"></ReportingGroupBySelect>
|
||||
@changed="updateTableReporting"></ReportingGroupBySelect>
|
||||
<span>and</span>
|
||||
<ReportingGroupBySelect
|
||||
v-model="subGroup"
|
||||
:group-by-options="
|
||||
groupByOptions.filter(
|
||||
(el) => el.value !== group
|
||||
)
|
||||
"
|
||||
@changed="updateTableReporting"
|
||||
v-model="subGroup"></ReportingGroupBySelect>
|
||||
@changed="updateTableReporting"></ReportingGroupBySelect>
|
||||
</div>
|
||||
<div
|
||||
class="grid items-center"
|
||||
@@ -473,8 +473,8 @@ const tableData = computed(() => {
|
||||
</div>
|
||||
</template>
|
||||
<div
|
||||
class="chart flex flex-col items-center justify-center py-12 col-span-3"
|
||||
v-else>
|
||||
v-else
|
||||
class="chart flex flex-col items-center justify-center py-12 col-span-3">
|
||||
<p class="text-lg text-white font-semibold">
|
||||
No time entries found
|
||||
</p>
|
||||
|
||||
@@ -252,7 +252,7 @@ async function downloadExport(format: ExportFormat) {
|
||||
class="overflow-hidden">
|
||||
<ReportingExportModal
|
||||
v-model:show="showExportModal"
|
||||
:exportUrl="exportUrl"></ReportingExportModal>
|
||||
:export-url="exportUrl"></ReportingExportModal>
|
||||
<MainContainer
|
||||
class="py-3 sm:py-5 border-b border-default-background-separator flex justify-between items-center">
|
||||
<div class="flex items-center space-x-3 sm:space-x-6">
|
||||
@@ -270,9 +270,9 @@ async function downloadExport(format: ExportFormat) {
|
||||
class="flex flex-wrap items-center space-y-2 sm:space-y-0 space-x-4">
|
||||
<div class="text-sm font-medium">Filters</div>
|
||||
<MemberMultiselectDropdown
|
||||
@submit="updateFilteredTimeEntries"
|
||||
v-model="selectedMembers">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedMembers"
|
||||
@submit="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedMembers.length"
|
||||
:active="selectedMembers.length > 0"
|
||||
@@ -281,9 +281,9 @@ async function downloadExport(format: ExportFormat) {
|
||||
</template>
|
||||
</MemberMultiselectDropdown>
|
||||
<ProjectMultiselectDropdown
|
||||
@submit="updateFilteredTimeEntries"
|
||||
v-model="selectedProjects">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedProjects"
|
||||
@submit="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedProjects.length"
|
||||
:active="selectedProjects.length > 0"
|
||||
@@ -292,9 +292,9 @@ async function downloadExport(format: ExportFormat) {
|
||||
</template>
|
||||
</ProjectMultiselectDropdown>
|
||||
<TaskMultiselectDropdown
|
||||
@submit="updateFilteredTimeEntries"
|
||||
v-model="selectedTasks">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedTasks"
|
||||
@submit="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedTasks.length"
|
||||
:active="selectedTasks.length > 0"
|
||||
@@ -303,20 +303,20 @@ async function downloadExport(format: ExportFormat) {
|
||||
</template>
|
||||
</TaskMultiselectDropdown>
|
||||
<ClientMultiselectDropdown
|
||||
@submit="updateFilteredTimeEntries"
|
||||
v-model="selectedClients">
|
||||
<template v-slot:trigger>
|
||||
v-model="selectedClients"
|
||||
@submit="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
title="Clients"
|
||||
:icon="FolderIcon"></ReportingFilterBadge>
|
||||
</template>
|
||||
</ClientMultiselectDropdown>
|
||||
<TagDropdown
|
||||
@submit="updateFilteredTimeEntries"
|
||||
:createTag
|
||||
v-model="selectedTags"
|
||||
:tags="tags">
|
||||
<template v-slot:trigger>
|
||||
:create-tag
|
||||
:tags="tags"
|
||||
@submit="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:count="selectedTags.length"
|
||||
:active="selectedTags.length > 0"
|
||||
@@ -326,7 +326,6 @@ async function downloadExport(format: ExportFormat) {
|
||||
</TagDropdown>
|
||||
|
||||
<SelectDropdown
|
||||
@changed="updateFilteredTimeEntries"
|
||||
v-model="billable"
|
||||
:get-key-from-item="(item) => item.value"
|
||||
:get-name-for-item="(item) => item.label"
|
||||
@@ -343,8 +342,9 @@ async function downloadExport(format: ExportFormat) {
|
||||
label: 'Non Billable',
|
||||
value: 'false',
|
||||
},
|
||||
]">
|
||||
<template v-slot:trigger>
|
||||
]"
|
||||
@changed="updateFilteredTimeEntries">
|
||||
<template #trigger>
|
||||
<ReportingFilterBadge
|
||||
:active="billable !== null"
|
||||
:title="
|
||||
@@ -366,12 +366,9 @@ async function downloadExport(format: ExportFormat) {
|
||||
</div>
|
||||
<TimeEntryMassActionRow
|
||||
:selected-time-entries="selectedTimeEntries"
|
||||
:canCreateProject="canCreateProjects()"
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction()"
|
||||
@submit="clearSelectionAndState"
|
||||
:can-create-project="canCreateProjects()"
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction()"
|
||||
:delete-selected="deleteSelected"
|
||||
@select-all="selectedTimeEntries = [...timeEntries]"
|
||||
@unselect-all="selectedTimeEntries = []"
|
||||
:all-selected="selectedTimeEntries.length === timeEntries.length"
|
||||
:projects="projects"
|
||||
:tasks="tasks"
|
||||
@@ -387,34 +384,37 @@ async function downloadExport(format: ExportFormat) {
|
||||
"
|
||||
:create-project="createProject"
|
||||
:create-client="createClient"
|
||||
:createTag="createTag"></TimeEntryMassActionRow>
|
||||
:create-tag="createTag"
|
||||
@submit="clearSelectionAndState"
|
||||
@select-all="selectedTimeEntries = [...timeEntries]"
|
||||
@unselect-all="selectedTimeEntries = []"></TimeEntryMassActionRow>
|
||||
<div class="w-full relative">
|
||||
<div v-for="entry in timeEntries" :key="entry.id">
|
||||
<TimeEntryRow
|
||||
:selected="selectedTimeEntries.includes(entry)"
|
||||
@selected="selectedTimeEntries.push(entry)"
|
||||
:canCreateProject="canCreateProjects()"
|
||||
@unselected="
|
||||
selectedTimeEntries = selectedTimeEntries.filter(
|
||||
(item) => item.id !== entry.id
|
||||
)
|
||||
"
|
||||
:createClient
|
||||
:createProject
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction()"
|
||||
:can-create-project="canCreateProjects()"
|
||||
:create-client
|
||||
:create-project
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction()"
|
||||
:projects="projects"
|
||||
:tasks="tasks"
|
||||
:tags="tags"
|
||||
:clients
|
||||
:createTag
|
||||
:updateTimeEntry
|
||||
:onStartStopClick="() => startTimeEntryFromExisting(entry)"
|
||||
:deleteTimeEntry="() => deleteTimeEntries([entry])"
|
||||
:create-tag
|
||||
:update-time-entry
|
||||
:on-start-stop-click="() => startTimeEntryFromExisting(entry)"
|
||||
:delete-time-entry="() => deleteTimeEntries([entry])"
|
||||
:currency="getOrganizationCurrencyString()"
|
||||
:members="members"
|
||||
showDate
|
||||
showMember
|
||||
:time-entry="entry"></TimeEntryRow>
|
||||
show-date
|
||||
show-member
|
||||
:time-entry="entry"
|
||||
@selected="selectedTimeEntries.push(entry)"
|
||||
@unselected="
|
||||
selectedTimeEntries = selectedTimeEntries.filter(
|
||||
(item) => item.id !== entry.id
|
||||
)
|
||||
"></TimeEntryRow>
|
||||
</div>
|
||||
<div v-if="timeEntries.length === 0">
|
||||
<div class="text-center pt-12">
|
||||
@@ -431,10 +431,10 @@ async function downloadExport(format: ExportFormat) {
|
||||
</div>
|
||||
|
||||
<PaginationRoot
|
||||
v-model:page="currentPage"
|
||||
:total="totalPages"
|
||||
:items-per-page="pageLimit"
|
||||
class="flex justify-center items-center py-8"
|
||||
v-model:page="currentPage"
|
||||
:sibling-count="1"
|
||||
show-edges>
|
||||
<PaginationList
|
||||
|
||||
@@ -101,12 +101,12 @@ watch(currentPage, () => {
|
||||
v-if="isBillingActivated() && canManageBilling()"
|
||||
href="/billing">
|
||||
<PrimaryButton
|
||||
type="button"
|
||||
class="mt-6"
|
||||
:icon="CreditCardIcon"
|
||||
v-if="
|
||||
isBillingActivated() && canUpdateOrganization()
|
||||
">
|
||||
"
|
||||
type="button"
|
||||
class="mt-6"
|
||||
:icon="CreditCardIcon">
|
||||
Go to Billing
|
||||
</PrimaryButton>
|
||||
</Link>
|
||||
@@ -120,10 +120,10 @@ watch(currentPage, () => {
|
||||
|
||||
<PaginationRoot
|
||||
v-if="reports.length > 0 || isAllowedToPerformPremiumAction()"
|
||||
v-model:page="currentPage"
|
||||
:total="totalPages"
|
||||
:items-per-page="pageLimit"
|
||||
class="flex justify-center items-center py-8"
|
||||
v-model:page="currentPage"
|
||||
:sibling-count="1"
|
||||
show-edges>
|
||||
<PaginationList
|
||||
|
||||
@@ -151,8 +151,8 @@ function getGroupLabel(key: string) {
|
||||
<MainContainer>
|
||||
<div class="pt-10 w-full px-3 relative">
|
||||
<ReportingChart
|
||||
:groupedType="aggregatedGraphTimeEntries?.grouped_type"
|
||||
:groupedData="
|
||||
:grouped-type="aggregatedGraphTimeEntries?.grouped_type"
|
||||
:grouped-data="
|
||||
aggregatedGraphTimeEntries?.grouped_data
|
||||
"></ReportingChart>
|
||||
</div>
|
||||
@@ -217,8 +217,8 @@ function getGroupLabel(key: string) {
|
||||
</div>
|
||||
</template>
|
||||
<div
|
||||
class="chart flex flex-col items-center justify-center py-12 col-span-3"
|
||||
v-else>
|
||||
v-else
|
||||
class="chart flex flex-col items-center justify-center py-12 col-span-3">
|
||||
<p class="text-lg text-white font-semibold">
|
||||
No time entries found
|
||||
</p>
|
||||
|
||||
@@ -31,9 +31,9 @@ async function createTag(tag: string) {
|
||||
>Create Tag
|
||||
</SecondaryButton>
|
||||
<TagCreateModal
|
||||
:createTag="createTag"
|
||||
v-model:show="showCreateTagModal"></TagCreateModal>
|
||||
v-model:show="showCreateTagModal"
|
||||
:create-tag="createTag"></TagCreateModal>
|
||||
</MainContainer>
|
||||
<TagTable :createTag="createTag"></TagTable>
|
||||
<TagTable :create-tag="createTag"></TagTable>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
@@ -191,9 +191,9 @@ const showResultModal = ref(false);
|
||||
<div>
|
||||
<InputLabel for="importType" value="Import Type" />
|
||||
<select
|
||||
name="importType"
|
||||
id="importType"
|
||||
v-model="importType"
|
||||
name="importType"
|
||||
class="mt-1 block w-full border-input-border bg-input-background text-white focus:border-input-border-active rounded-md shadow-sm">
|
||||
<option :value="null" selected disabled>
|
||||
Select an import type to get instructions...
|
||||
@@ -206,8 +206,8 @@ const showResultModal = ref(false);
|
||||
</option>
|
||||
</select>
|
||||
<div
|
||||
class="py-3 text-white"
|
||||
v-if="currentImporterDescription">
|
||||
v-if="currentImporterDescription"
|
||||
class="py-3 text-white">
|
||||
<div class="font-semibold text-muted py-1">
|
||||
Instructions:
|
||||
</div>
|
||||
@@ -233,12 +233,12 @@ const showResultModal = ref(false);
|
||||
>Upload a Toggl/Clockify Export</span
|
||||
>
|
||||
<input
|
||||
ref="importFile"
|
||||
id="file-upload"
|
||||
ref="importFile"
|
||||
name="file-upload"
|
||||
v-on:change="updateFiles"
|
||||
type="file"
|
||||
class="sr-only" />
|
||||
class="sr-only"
|
||||
@change="updateFiles" />
|
||||
</label>
|
||||
</div>
|
||||
<p class="text-xs leading-5 text-muted">
|
||||
|
||||
@@ -62,10 +62,10 @@ function checkForConfirmationModal() {
|
||||
<template #form>
|
||||
<OrganizationBillableRateModal
|
||||
v-model:show="showConfirmationModal"
|
||||
@submit="submit"
|
||||
:new-billable-rate="
|
||||
organizationBody.billable_rate
|
||||
"></OrganizationBillableRateModal>
|
||||
"
|
||||
@submit="submit"></OrganizationBillableRateModal>
|
||||
<!-- Organization Owner Information -->
|
||||
<div class="col-span-6">
|
||||
<div class="col-span-6 sm:col-span-4">
|
||||
@@ -75,8 +75,8 @@ function checkForConfirmationModal() {
|
||||
value="Organization Billable Rate" />
|
||||
<BillableRateInput
|
||||
v-if="organization"
|
||||
:currency="getOrganizationCurrencyString()"
|
||||
v-model="organizationBody.billable_rate"
|
||||
:currency="getOrganizationCurrencyString()"
|
||||
name="organizationBillableRate"></BillableRateInput>
|
||||
</div>
|
||||
</div>
|
||||
@@ -86,10 +86,10 @@ function checkForConfirmationModal() {
|
||||
<div class="flex items-center space-x-2">
|
||||
<Checkbox
|
||||
v-if="organization"
|
||||
id="organizationShowBillableRatesToEmployees"
|
||||
v-model:checked="
|
||||
organizationBody.employees_can_see_billable_rates
|
||||
"
|
||||
id="organizationShowBillableRatesToEmployees"></Checkbox>
|
||||
"></Checkbox>
|
||||
<InputLabel
|
||||
for="organizationShowBillableRatesToEmployees"
|
||||
value="Show Billable Rates to Employees" />
|
||||
|
||||
@@ -89,9 +89,9 @@ const updateTeamName = () => {
|
||||
<div class="col-span-6 sm:col-span-4">
|
||||
<InputLabel for="currency" value="Currency" />
|
||||
<select
|
||||
name="currency"
|
||||
id="currency"
|
||||
v-model="form.currency"
|
||||
name="currency"
|
||||
:disabled="!permissions.canUpdateTeam"
|
||||
class="mt-1 block w-full border-input-border bg-input-background text-white focus:border-input-border-active rounded-md shadow-sm">
|
||||
<option value="" disabled>Select a currency</option>
|
||||
|
||||
@@ -120,16 +120,16 @@ function deleteSelected() {
|
||||
|
||||
<template>
|
||||
<TimeEntryCreateModal
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction()"
|
||||
:createProject="createProject"
|
||||
:createClient="createClient"
|
||||
:createTag="createTag"
|
||||
:createTimeEntry="createTimeEntry"
|
||||
v-model:show="showManualTimeEntryModal"
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction()"
|
||||
:create-project="createProject"
|
||||
:create-client="createClient"
|
||||
:create-tag="createTag"
|
||||
:create-time-entry="createTimeEntry"
|
||||
:projects
|
||||
:tasks
|
||||
:tags
|
||||
:clients
|
||||
v-model:show="showManualTimeEntryModal"></TimeEntryCreateModal>
|
||||
:clients></TimeEntryCreateModal>
|
||||
<AppLayout title="Dashboard" data-testid="time_view">
|
||||
<MainContainer
|
||||
class="pt-5 lg:pt-8 pb-4 lg:pb-6 border-b border-default-background-separator">
|
||||
@@ -141,8 +141,8 @@ function deleteSelected() {
|
||||
<div class="pb-2 pt-2 lg:pt-0 lg:pl-4 flex justify-center">
|
||||
<SecondaryButton
|
||||
class="w-full text-center flex justify-center"
|
||||
@click="showManualTimeEntryModal = true"
|
||||
:icon="PlusIcon"
|
||||
@click="showManualTimeEntryModal = true"
|
||||
>Manual time entry
|
||||
</SecondaryButton>
|
||||
</div>
|
||||
@@ -150,12 +150,9 @@ function deleteSelected() {
|
||||
</MainContainer>
|
||||
<TimeEntryMassActionRow
|
||||
:selected-time-entries="selectedTimeEntries"
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction()"
|
||||
:canCreateProject="canCreateProjects()"
|
||||
@submit="clearSelectionAndState"
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction()"
|
||||
:can-create-project="canCreateProjects()"
|
||||
:all-selected="selectedTimeEntries.length === timeEntries.length"
|
||||
@select-all="selectedTimeEntries = [...timeEntries]"
|
||||
@unselect-all="selectedTimeEntries = []"
|
||||
:delete-selected="deleteSelected"
|
||||
:projects="projects"
|
||||
:tasks="tasks"
|
||||
@@ -171,23 +168,26 @@ function deleteSelected() {
|
||||
"
|
||||
:create-project="createProject"
|
||||
:create-client="createClient"
|
||||
:createTag="createTag"></TimeEntryMassActionRow>
|
||||
:create-tag="createTag"
|
||||
@submit="clearSelectionAndState"
|
||||
@select-all="selectedTimeEntries = [...timeEntries]"
|
||||
@unselect-all="selectedTimeEntries = []"></TimeEntryMassActionRow>
|
||||
<TimeEntryGroupedTable
|
||||
v-model:selected="selectedTimeEntries"
|
||||
:createProject
|
||||
:enableEstimatedTime="isAllowedToPerformPremiumAction()"
|
||||
:canCreateProject="canCreateProjects()"
|
||||
:create-project
|
||||
:enable-estimated-time="isAllowedToPerformPremiumAction()"
|
||||
:can-create-project="canCreateProjects()"
|
||||
:clients
|
||||
:createClient
|
||||
:updateTimeEntry
|
||||
:updateTimeEntries
|
||||
:deleteTimeEntries
|
||||
:createTimeEntry="startTimeEntry"
|
||||
:createTag
|
||||
:create-client
|
||||
:update-time-entry
|
||||
:update-time-entries
|
||||
:delete-time-entries
|
||||
:create-time-entry="startTimeEntry"
|
||||
:create-tag
|
||||
:projects="projects"
|
||||
:tasks="tasks"
|
||||
:currency="getOrganizationCurrencyString()"
|
||||
:timeEntries="timeEntries"
|
||||
:time-entries="timeEntries"
|
||||
:tags="tags"></TimeEntryGroupedTable>
|
||||
<div v-if="timeEntries.length === 0" class="text-center pt-12">
|
||||
<ClockIcon class="w-8 text-icon-default inline pb-2"></ClockIcon>
|
||||
|
||||
Reference in New Issue
Block a user