Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e3e87c1
[qa] fix edge case of undefined value
NicoPennec Dec 11, 2025
4b759e4
[qa] fix edge case of undefined value
NicoPennec Dec 11, 2025
fdf75e2
[qa] fix edge case of undefined value
NicoPennec Dec 11, 2025
0e261fe
[qa] fix edge case of undefined value
NicoPennec Dec 11, 2025
2d4c588
[qa] remove useless css
NicoPennec Dec 11, 2025
9dd4576
[widgets] refactor DepartmentName component
NicoPennec Dec 11, 2025
ef59ad3
[widgets] refactor StudioName component
NicoPennec Dec 11, 2025
019433c
[qa] bump dependencies
NicoPennec Dec 11, 2025
65654df
[widgets] refactor PeopleName component
NicoPennec Dec 11, 2025
0f87239
[qa] fix edge case of undefined value
NicoPennec Dec 12, 2025
a172f76
[qa] remove unused code
NicoPennec Dec 12, 2025
7ceb915
[logs] switch to server-side pagination for the log list
NicoPennec Dec 13, 2025
55bbb11
[logs] add server-side pagination for the preview files list
NicoPennec Dec 13, 2025
e25c5c2
[qa] bump dependencies
NicoPennec Dec 13, 2025
3a2a5d2
[qa] improve intersection function
NicoPennec Dec 13, 2025
89d5670
[qa] improve EmojiButton component
NicoPennec Dec 13, 2025
e9d5dc1
[qa] fix edge case of undefined value
NicoPennec Dec 13, 2025
5b0d435
[qa] fix code typo
NicoPennec Dec 13, 2025
eb1edfa
[qa] bump dependencies
NicoPennec Dec 16, 2025
b934fb2
[previews] fix the unwanted PDF loading in the background
NicoPennec Dec 16, 2025
a921387
[qa] improve PdfViewer component
NicoPennec Dec 16, 2025
dcec723
[tasks] fix the task start date and due date updates
NicoPennec Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
373 changes: 181 additions & 192 deletions package-lock.json

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"@fullcalendar/multimonth": "6.1.19",
"@fullcalendar/vue3": "6.1.19",
"@google/model-viewer": "4.1.0",
"@sentry/vue": "10.29.0",
"@sentry/vue": "10.30.0",
"@unhead/vue": "2.0.19",
"@vuepic/vue-datepicker": "11.0.3",
"async": "3.2.6",
Expand All @@ -40,7 +40,7 @@
"exceljs": "4.4.0",
"fabric": "cgwire/fabric.js",
"file-saver": "2.0.5",
"lucide-vue-next": "0.556.0",
"lucide-vue-next": "0.561.0",
"marked": "16.4.2",
"marked-emoji": "2.0.2",
"moment": "2.30.1",
Expand All @@ -52,7 +52,7 @@
"socket.io-client": "4.8.1",
"superagent": "10.2.3",
"thenby": "1.3.4",
"three": "0.181.2",
"three": "0.182.0",
"uuid": "13.0.0",
"v-autosize": "2.0.1",
"vue": "3.5.13",
Expand All @@ -62,7 +62,7 @@
"vue-i18n": "9.14.5",
"vue-meta": "2.4.0",
"vue-multiselect": "3.4.0",
"vue-router": "4.6.3",
"vue-router": "4.6.4",
"vue-websocket-next": "0.2.7",
"vue3-emoji-picker": "1.1.8",
"vuedraggable": "4.1.0",
Expand All @@ -71,10 +71,10 @@
"wavesurfer.js": "7.11.1"
},
"devDependencies": {
"@vitejs/plugin-vue": "6.0.2",
"@vitejs/plugin-vue": "6.0.3",
"@vue/compiler-sfc": "3.5.13",
"@vue/test-utils": "2.4.6",
"autoprefixer": "10.4.22",
"autoprefixer": "10.4.23",
"eslint": "8.57.1",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-prettier": "5.5.4",
Expand All @@ -85,8 +85,8 @@
"lint-staged": "16.2.7",
"localStorage": "1.0.4",
"prettier": "3.7.4",
"sass": "1.94.2",
"vite": "7.2.7",
"sass": "1.97.0",
"vite": "7.3.0",
"vitest": "4.0.15",
"vitest-localstorage-mock": "0.1.2"
},
Expand Down
24 changes: 11 additions & 13 deletions src/components/cells/DepartmentNamesCell.vue
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
<template>
<td class="departments">
<span
class="departments-element"
:key="'department-' + department.id"
v-for="department in sortDepartments(departments)"
>
<department-name :department="department" v-if="department" />
</span>
<td>
<department-name
:key="department.id"
:department="department"
v-for="department in sortedDepartments"
/>
</td>
</template>

Expand All @@ -32,13 +30,13 @@ export default {
},

computed: {
...mapGetters(['departmentMap'])
},
...mapGetters(['departmentMap']),

methods: {
sortDepartments(departmentIds = []) {
sortedDepartments() {
return sortByName(
departmentIds.map(departmentId => this.departmentMap.get(departmentId))
this.departments
.map(departmentId => this.departmentMap.get(departmentId))
.filter(Boolean)
)
}
}
Expand Down
4 changes: 0 additions & 4 deletions src/components/lists/PeopleList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -281,10 +281,6 @@ export default {
.departments {
width: 180px;
min-width: 180px;

.departments-element {
padding: 5px;
}
}

.studio {
Expand Down
4 changes: 2 additions & 2 deletions src/components/lists/TaskList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,7 @@ export default {
} else {
data = {
start_date: null,
due_date: dueDate
due_date: task.due_date
}
}
if (task.difficulty) {
Expand Down Expand Up @@ -682,7 +682,7 @@ export default {
)
} else {
data = {
start_date: startDate,
start_date: task.start_date,
due_date: null
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/components/lists/TodosList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -773,7 +773,7 @@ export default {
} else {
data = {
start_date: null,
due_date: dueDate
due_date: task.due_date
}
}
if (this.isTaskChanged(task, data)) {
Expand Down Expand Up @@ -807,7 +807,7 @@ export default {
)
} else {
data = {
start_date: startDate,
start_date: task.start_date,
due_date: null
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/components/modals/EditAssetModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -251,13 +251,13 @@ export default {
getEntityTypeIdDefaultValue() {
let entityTypeId = this.assetToEdit.asset_type_id
if (!entityTypeId) {
entityTypeId = this.productionAssetTypeOptions[0].value
entityTypeId = this.productionAssetTypeOptions[0]?.value
}
const isInOptions = this.productionAssetTypeOptions.find(
const isInOptions = this.productionAssetTypeOptions.some(
option => option.value === entityTypeId
)
if (!isInOptions) {
entityTypeId = this.productionAssetTypeOptions[0].value
entityTypeId = this.productionAssetTypeOptions[0]?.value
}
return entityTypeId
},
Expand Down
2 changes: 1 addition & 1 deletion src/components/modals/EditBackgroundModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ export default {
this.form.name = file.name.slice(0, -4)
}
this.$nextTick(() => {
this.$refs.nameField.focus()
this.$refs.nameField?.focus()
})
},

Expand Down
2 changes: 1 addition & 1 deletion src/components/pages/Logs.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</ul>
</div>
<events v-if="isActiveTab('events')" />
<preview-files v-if="isActiveTab('preview_files')" />
<preview-files v-else-if="isActiveTab('preview_files')" />
</div>
</template>

Expand Down
4 changes: 3 additions & 1 deletion src/components/pages/Shots.vue
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,9 @@ export default {
const finalize = () => {
this.$nextTick(() => {
// Needed to be sure the current production is set
this.loadShots()
this.loadShots(() => {
this.initialLoading = false
})
})
}

Expand Down
2 changes: 1 addition & 1 deletion src/components/pages/Task.vue
Original file line number Diff line number Diff line change
Expand Up @@ -1288,7 +1288,7 @@ export default {
this.$refs['preview-player'].displayFirst()
this.deleteTaskPreview({
taskId: this.task.id,
commentId: comment.id,
commentId: comment?.id,
previewId: this.currentExtraPreviewId
})
.then(() => {
Expand Down
112 changes: 67 additions & 45 deletions src/components/pages/logs/Events.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,24 @@
<button-simple
class="flexrow-item small"
icon="refresh"
@click="loadDayEvents"
:is-loading="loading.events"
:title="$t('main.reload')"
@click="loadDayEvents()"
/>
<span class="flexrow-item nb-events">
{{ filteredEvents.length }} {{ $t('logs.events') }}
</span>
</div>

<div class="mt2 empty" v-if="!isLoading && !filteredEvents.length">
<div class="mt2 empty" v-if="!loading.events && !filteredEvents.length">
{{ $t('logs.empty_list') }}
</div>
<div class="has-text-centered" v-if="isLoading">
<div class="has-text-centered" v-if="loading.events">
<spinner />
</div>
<div class="log-list" v-else>
<div
class="event-line"
:key="event.id"
@click="selectLine(event)"
v-for="event in displayedEvents"
v-for="event in filteredEvents"
>
<span class="date tag mr1">{{ event.date }} </span>
<span
Expand Down Expand Up @@ -77,8 +76,9 @@
</div>
<div class="has-text-centered mt1" v-if="hasMoreEvents">
<button-simple
:is-loading="loading.moreEvents"
:text="$t('main.load_more')"
@click="displayLimit += PAGE_SIZE"
@click="loadMoreEvents()"
/>
</div>
</div>
Expand All @@ -99,6 +99,8 @@ import PeopleField from '@/components/widgets/PeopleField.vue'
import PeopleName from '@/components/widgets/PeopleName.vue'
import Spinner from '@/components/widgets/Spinner.vue'

const PAGE_SIZE = 1000

export default {
name: 'events',

Expand All @@ -114,15 +116,16 @@ export default {
},

data() {
const PAGE_SIZE = 1000
return {
PAGE_SIZE,
currentDate: new Date(),
events: [],
isLoading: true,
hasMoreEvents: false,
selectedEvents: {},
selectedPerson: null,
displayLimit: PAGE_SIZE
loading: {
events: false,
moreEvents: false
}
}
},

Expand All @@ -145,50 +148,69 @@ export default {
)
}
return events
},

displayedEvents() {
return this.filteredEvents.slice(0, this.displayLimit)
},

hasMoreEvents() {
return this.filteredEvents.length > this.displayLimit
}
},

methods: {
...mapActions(['loadEvents']),

loadDayEvents() {
async loadDayEvents() {
const before = moment(this.currentDate).add(1, 'days')
const after = moment(this.currentDate)
this.selectedEvents = {}
this.displayLimit = this.PAGE_SIZE
this.isLoading = true
this.loadEvents({
after: formatFullDateWithRevertedTimezone(after, this.timezone),
before: formatFullDateWithRevertedTimezone(before, this.timezone)
})
.then(events => {
this.events = events.map(event => {
const [name, type] = event.name.split(':')
return {
id: event.id,
date: this.formatDate(event.created_at),
data: event.data,
name,
shortType: type.substring(0, 3),
type,
user_id: event.user_id
}
})
this.events = []
this.loading.events = true
try {
const events = await this.loadEvents({
after: formatFullDateWithRevertedTimezone(after, this.timezone),
before: formatFullDateWithRevertedTimezone(before, this.timezone),
limit: PAGE_SIZE
})
.catch(err => {
console.error(err)
})
.finally(() => {
this.isLoading = false
this.events = this.formatEvents(events)
this.hasMoreEvents = events.length >= PAGE_SIZE
} catch (err) {
console.error(err)
} finally {
this.loading.events = false
}
},

async loadMoreEvents() {
if (!this.events.length) return

this.loading.moreEvents = true
const lastEventId = this.events[this.events.length - 1].id
const before = moment(this.currentDate).add(1, 'days')
const after = moment(this.currentDate)
try {
const events = await this.loadEvents({
after: formatFullDateWithRevertedTimezone(after, this.timezone),
before: formatFullDateWithRevertedTimezone(before, this.timezone),
lastEventId,
limit: PAGE_SIZE
})
this.events = [...this.events, ...this.formatEvents(events)]
this.hasMoreEvents = events.length >= PAGE_SIZE
} catch (err) {
console.error(err)
} finally {
this.loading.moreEvents = false
}
},

formatEvents(events) {
return events.map(event => {
const [name, type] = event.name.split(':')
return {
id: event.id,
date: this.formatDate(event.created_at),
data: event.data,
name,
shortType: type.substring(0, 3),
type,
user_id: event.user_id
}
})
},

selectLine(event) {
Expand Down
Loading