From 3a52e44376130a83ad1a3e0d62b0dd9fa5629c37 Mon Sep 17 00:00:00 2001 From: Irv Katz <60225276+exidy80@users.noreply.github.com> Date: Fri, 2 May 2025 15:14:30 -0400 Subject: [PATCH 1/2] convert to using lodash-es --- app/app.js | 2 +- app/components/answer-new.js | 2 +- app/components/bread-crumbs-item.js | 6 +- app/components/comment-list.js | 18 ++-- app/components/import-work-step1.js | 6 +- app/components/import-work-step2.js | 6 +- app/components/import-work-step4.js | 6 +- app/components/import-work-step5.js | 6 +- app/components/problem-info.js | 4 +- app/components/problem-new.js | 2 +- app/components/search-bar.js | 17 +--- app/components/submission-viewer-list.js | 1 - app/components/submissions-filter.js | 84 ++++--------------- app/components/workspace-info.js | 4 +- app/components/workspace-list-item.js | 12 +-- app/components/workspace-new-container.js | 15 ++-- app/components/workspace-new-copy.js | 10 ++- app/components/workspace-new-settings.js | 14 ++-- app/components/ws-copy-config.js | 9 +- app/components/ws-copy-custom-config.js | 17 ++-- app/components/ws-copy-owner-settings.js | 8 +- app/components/ws-copy-permissions.js | 19 +++-- app/components/ws-copy-workspace.js | 6 +- app/components/ws-new-settings-permissions.js | 7 +- app/components/ws-permissions-new.js | 9 +- app/helpers/is-empty.js | 2 +- app/helpers/is-equal.js | 2 +- app/helpers/not-empty.js | 2 +- app/routes/submissions/submission.js | 6 +- app/services/socket-io.js | 7 +- app/services/string-similarity.js | 12 +-- package.json | 1 + 32 files changed, 140 insertions(+), 182 deletions(-) diff --git a/app/app.js b/app/app.js index 094a7fce3..7cbce9fd0 100644 --- a/app/app.js +++ b/app/app.js @@ -3,7 +3,7 @@ import Application from '@ember/application'; import loadInitializers from 'ember-load-initializers'; import Resolver from 'ember-resolver'; import $ from 'jquery'; -import _ from 'lodash'; +import * as _ from 'lodash-es'; import config from './config/environment'; // export for others scripts to use diff --git a/app/components/answer-new.js b/app/components/answer-new.js index 71b11fade..e2eabfcb8 100644 --- a/app/components/answer-new.js +++ b/app/components/answer-new.js @@ -1,7 +1,7 @@ import ErrorHandlingComponent from './error-handling'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; -import isEqual from 'lodash/isEqual'; +import isEqual from 'lodash-es/isEqual'; import { inject as service } from '@ember/service'; import $ from 'jquery'; import { all, reject, resolve } from 'rsvp'; diff --git a/app/components/bread-crumbs-item.js b/app/components/bread-crumbs-item.js index 38b799361..98912677a 100644 --- a/app/components/bread-crumbs-item.js +++ b/app/components/bread-crumbs-item.js @@ -1,9 +1,9 @@ import Component from '@glimmer/component'; import { action } from '@ember/object'; import moment from 'moment'; -import isEqual from 'lodash/isEqual'; -import isString from 'lodash/isString'; -import isObject from 'lodash/isObject'; +import isEqual from 'lodash-es/isEqual'; +import isString from 'lodash-es/isString'; +import isObject from 'lodash-es/isObject'; export default class BreadCumbsItemComponent extends Component { get isSelected() { diff --git a/app/components/comment-list.js b/app/components/comment-list.js index d3ef0f1f0..9eacbfa34 100644 --- a/app/components/comment-list.js +++ b/app/components/comment-list.js @@ -13,11 +13,13 @@ import { computed } from '@ember/object'; * TODO: * - Test the hashtag stuff to see if that is still working. */ -/*global _:false */ import { and, equal } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; import $ from 'jquery'; import moment from 'moment'; +import isArray from 'lodash-es/isArray'; +import isNaN from 'lodash-es/isNaN'; +import random from 'lodash-es/random'; import ErrorHandlingMixin from '../mixins/error_handling_mixin'; export default Component.extend(ErrorHandlingMixin, { @@ -119,8 +121,8 @@ export default Component.extend(ErrorHandlingMixin, { let path = `labels.${newCommentLabel}.placeholder`; let placeholder = this.get(path); - if (_.isArray(placeholder)) { - placeholder = placeholder[_.random(0, placeholder.length - 1)]; + if (isArray(placeholder)) { + placeholder = placeholder[random(0, placeholder.length - 1)]; } return placeholder; }), @@ -340,20 +342,20 @@ export default Component.extend(ErrorHandlingMixin, { } let month = split[0]; let monthInt = parseInt(month, 10); - if (_.isNaN(monthInt) || monthInt > 12 || monthInt < 1) { + if (isNaN(monthInt) || monthInt > 12 || monthInt < 1) { return false; } let day = split[1]; let dayInt = parseInt(day, 10); - if (_.isNaN(dayInt) || dayInt < 1 || dayInt > 31) { + if (isNaN(dayInt) || dayInt < 1 || dayInt > 31) { return false; } let year = split[2]; let yearInt = parseInt(year, 10); - if (_.isNaN(yearInt) || yearInt < 1000 || yearInt > 9999) { + if (isNaN(yearInt) || yearInt < 1000 || yearInt > 9999) { return false; } return true; @@ -599,7 +601,7 @@ export default Component.extend(ErrorHandlingMixin, { let dateInput = this.sinceDate; let parsedDate = Date.parse(dateInput); - if (_.isNaN(parsedDate)) { + if (isNaN(parsedDate)) { return this.set('invalidDateError', 'Please enter a valid date'); } options.sinceDate = dateInput; diff --git a/app/components/import-work-step1.js b/app/components/import-work-step1.js index b6e87c9c9..86adfafba 100644 --- a/app/components/import-work-step1.js +++ b/app/components/import-work-step1.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; +import { service } from '@ember/service'; export default Component.extend({ elementId: 'import-work-step1', @@ -21,7 +21,7 @@ export default Component.extend({ return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedProblem', null); return; diff --git a/app/components/import-work-step2.js b/app/components/import-work-step2.js index fb3724fec..1d20f3dde 100644 --- a/app/components/import-work-step2.js +++ b/app/components/import-work-step2.js @@ -1,8 +1,8 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ import { equal } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'import-work-step2', @@ -46,7 +46,7 @@ export default Component.extend({ return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedSection', null); return; diff --git a/app/components/import-work-step4.js b/app/components/import-work-step4.js index 5c0f8422d..5e1d7edec 100644 --- a/app/components/import-work-step4.js +++ b/app/components/import-work-step4.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import map from 'lodash-es/map'; export default Component.extend({ elementId: 'import-work-step4', @@ -19,7 +19,7 @@ export default Component.extend({ if (!this.studentMap) { return []; } - return _.map(this.studentMap, (val, key) => { + return map(this.studentMap, (val, key) => { return val; }); }), diff --git a/app/components/import-work-step5.js b/app/components/import-work-step5.js index a4ad4ed2f..8b3c8d9ff 100644 --- a/app/components/import-work-step5.js +++ b/app/components/import-work-step5.js @@ -1,8 +1,8 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; import { equal } from '@ember/object/computed'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'import-work-step5', @@ -132,7 +132,7 @@ export default Component.extend({ this.set('createAssignmentValue', val); }, updateSelectizeSingle(val, $item, propToUpdate, model) { - if (_.isNull($item)) { + if (isNull($item)) { this.set(propToUpdate, null); return; } diff --git a/app/components/problem-info.js b/app/components/problem-info.js index 3f12f8f96..b68aae1c5 100644 --- a/app/components/problem-info.js +++ b/app/components/problem-info.js @@ -1,8 +1,8 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; -import _isEqual from 'lodash/isEqual'; -import _isNull from 'lodash/isNull'; +import _isEqual from 'lodash-es/isEqual'; +import _isNull from 'lodash-es/isNull'; import { service } from '@ember/service'; export default class ProblemInfoComponent extends Component { diff --git a/app/components/problem-new.js b/app/components/problem-new.js index a478a8f57..96cadc334 100644 --- a/app/components/problem-new.js +++ b/app/components/problem-new.js @@ -2,7 +2,7 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; import { service } from '@ember/service'; -import _isNull from 'lodash/isNull'; +import _isNull from 'lodash-es/isNull'; export default class ProblemNewComponent extends Component { @service('sweet-alert') alert; diff --git a/app/components/search-bar.js b/app/components/search-bar.js index e0fa7b252..6dae31bdb 100644 --- a/app/components/search-bar.js +++ b/app/components/search-bar.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ import { alias } from '@ember/object/computed'; +import debounce from 'lodash-es/debounce'; export default Component.extend({ classNames: ['search-bar-comp'], @@ -22,10 +22,7 @@ export default Component.extend({ let doDebounce = this.doDebounce || false; let debounceTime = this.debounceTime || 300; if (doDebounce) { - this.set( - 'debouncedSearch', - _.debounce(this.onChangeSearch, debounceTime) - ); + this.set('debouncedSearch', debounce(this.onChangeSearch, debounceTime)); } }, @@ -98,17 +95,7 @@ export default Component.extend({ actions: { clearResults: function () { - // let textVal = this.get("inputValue"); - // let isString = _.isString(textVal); - // if (!isString) { - // return; - // } - // let trimmed = textVal.trim(); - // if (trimmed.length === 0) { - // just empty spaces, clear out search bar but dont bubble up and fetch this.set('inputValue', null); - // return; - // } this.clearSearchResults(); }, diff --git a/app/components/submission-viewer-list.js b/app/components/submission-viewer-list.js index a9bdbf86d..0687c6b18 100644 --- a/app/components/submission-viewer-list.js +++ b/app/components/submission-viewer-list.js @@ -1,4 +1,3 @@ -/*global _:false */ import Component from '@ember/component'; import { computed } from '@ember/object'; import $ from 'jquery'; diff --git a/app/components/submissions-filter.js b/app/components/submissions-filter.js index 950cf4a56..521e6a9dc 100644 --- a/app/components/submissions-filter.js +++ b/app/components/submissions-filter.js @@ -1,10 +1,14 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ import { later } from '@ember/runloop'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; import $ from 'jquery'; import moment from 'moment'; +import isArray from 'lodash-es/isArray'; +import isObject from 'lodash-es/isObject'; +import isNull from 'lodash-es/isNull'; +import map from 'lodash-es/map'; +import each from 'lodash-es/each'; export default Component.extend({ elementId: 'submissions-filter', @@ -33,58 +37,6 @@ export default Component.extend({ this._super(...arguments); this.set('startDate', moment().subtract(1, 'y').format('YYYY-MM-DD')); this.set('endDate', moment().format('YYYY-MM-DD')); - // const that = this; - - // $(function () { - // let startDate = that.get('startDate'); - // let endDate = that.get('endDate'); - - // if (!startDate) { - // startDate = moment().subtract(1, 'years'); - // } else if (_.isString(startDate)) { - // startDate = moment(startDate); - // } - // if (!endDate) { - // endDate = moment(); - // } else if (_.isString(endDate)) { - // endDate = moment(endDate); - // } - - // $('input[name="startDate"]').daterangepicker({ - // singleDatePicker: true, - // showDropdowns: true, - // minYear: 1990, - // autoUpdateInput: true, - // locale: { - // cancelLabel: 'Clear', - // }, - // startDate: startDate, - // }); - // $('input[name="endDate"]').daterangepicker({ - // singleDatePicker: true, - // showDropdowns: true, - // minYear: 1990, - // autoUpdateInput: true, - // locale: { - // cancelLabel: 'Clear', - // }, - // startDate: endDate, - // }); - // $('input[name="startDate"]').on( - // 'apply.daterangepicker', - // function (ev, picker) { - // $(this).val(picker.startDate.format('MM/DD/YYYY')); - // } - // ); - // $('input[name="endDate"]').on( - // 'apply.daterangepicker', - // function (ev, picker) { - // $(this).val(picker.startDate.format('MM/DD/YYYY')); - // } - // ); - // $('input[name="startDate"]').attr('placeholder', 'mm/dd/yyyy'); - // $('input[name="endDate"]').attr('placeholder', 'mm/dd/yyyy'); - // }); }, missingCriteriaMessage: 'Please select either a teacher, assignment, problem, class, or at least one student.', @@ -132,7 +84,7 @@ export default Component.extend({ if (this.get('currentUser.isStudent')) { return [this.get('currentUser.id')]; } - if (_.isArray(this.selectedStudents)) { + if (isArray(this.selectedStudents)) { return this.selectedStudents.mapBy('id'); } return []; @@ -294,7 +246,7 @@ export default Component.extend({ studentPoolOptions: computed('studentPool.[]', function () { let students = this.studentPool; - if (!_.isObject(students)) { + if (!isObject(students)) { return []; } return students.map((user) => { @@ -437,7 +389,7 @@ export default Component.extend({ }); } - let mapped = _.map(assignments, (assignment) => { + let mapped = map(assignments, (assignment) => { return { id: assignment.id, name: assignment.get('name'), @@ -521,7 +473,7 @@ export default Component.extend({ return []; } const ids = this.selectedStudentSectionIds; - if (sections && _.isArray(ids)) { + if (sections && isArray(ids)) { return sections.filter((section) => { return ids.includes(section.get('id')); }); @@ -539,7 +491,7 @@ export default Component.extend({ } const sections = this.baseSections; const ids = this.selectedTeacherSectionIds; - if (sections && _.isArray(ids)) { + if (sections && isArray(ids)) { return sections.filter((section) => { return ids.includes(section.get('id')); }); @@ -599,7 +551,7 @@ export default Component.extend({ }); } - let mapped = _.map(sections, (section) => { + let mapped = map(sections, (section) => { return { id: section.id, name: section.get('name'), @@ -675,7 +627,7 @@ export default Component.extend({ buildCriteria: function () { //clear errors if any let errorProps = ['isMissingCriteria', 'isInvalidDateRange']; - _.each(errorProps, (prop) => { + each(errorProps, (prop) => { if (this.get(prop)) { this.set(prop, null); } @@ -711,7 +663,7 @@ export default Component.extend({ vmtSearchText: this.vmtSearchText, isTrashedOnly: this.isTrashedOnly, }; - _.each(criteria, (val, key) => { + each(criteria, (val, key) => { if (utils.isNullOrUndefined(val) || val === '') { delete criteria[key]; } @@ -728,7 +680,7 @@ export default Component.extend({ }, updateSelectizeSingle(val, $item, propToUpdate, model) { - if (_.isNull($item)) { + if (isNull($item)) { this.set(propToUpdate, null); return; } @@ -743,7 +695,7 @@ export default Component.extend({ return; } let selectedStudents = this.selectedStudents; - if (_.isNull($item)) { + if (isNull($item)) { // removal let studentToRemove = selectedStudents.findBy('id', val); if (studentToRemove) { @@ -760,9 +712,9 @@ export default Component.extend({ if (!val || !propToUpdate) { return; } - let isRemoval = _.isNull($item); + let isRemoval = isNull($item); let prop = this.get(propToUpdate); - let isPropArray = _.isArray(prop); + let isPropArray = isArray(prop); if (isRemoval) { if (!isPropArray) { diff --git a/app/components/workspace-info.js b/app/components/workspace-info.js index 76ac511b8..704de857e 100644 --- a/app/components/workspace-info.js +++ b/app/components/workspace-info.js @@ -3,8 +3,8 @@ import { tracked } from '@glimmer/tracking'; // import { inject as controller } from '@ember/controller'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; -import isObject from 'lodash/isObject'; -import isString from 'lodash/isString'; +import isObject from 'lodash-es/isObject'; +import isString from 'lodash-es/isString'; export default class WorkspaceInfoComponent extends ErrorHandlingComponent { @service('current-user') currentUser; diff --git a/app/components/workspace-list-item.js b/app/components/workspace-list-item.js index 22434c44f..04ddfda10 100644 --- a/app/components/workspace-list-item.js +++ b/app/components/workspace-list-item.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import filter from 'lodash-es/filter'; export default Component.extend({ classNames: ['workspace-list-item'], @@ -48,18 +48,18 @@ export default Component.extend({ let moreMenuOptions = this.menuOptions; let options = moreMenuOptions.slice(); if (currentUser.isStudent) { - options = _.filter(options, (option) => { + options = filter(options, (option) => { return option.value !== 'assign'; }); } if (!canDelete || deleted) { - options = _.filter(options, (option) => { + options = filter(options, (option) => { return option.value !== 'delete'; }); } if (!canCopy) { - options = _.filter(options, (option) => { + options = filter(options, (option) => { return option.value !== 'copy'; }); } @@ -67,7 +67,7 @@ export default Component.extend({ if (hiddenWorkspaces.length >= 1) { let wsId = ws.get('id'); if (hiddenWorkspaces.includes(wsId)) { - options = _.filter(options, (option) => { + options = filter(options, (option) => { return option.value !== 'hide'; }); } diff --git a/app/components/workspace-new-container.js b/app/components/workspace-new-container.js index d120a1c49..b9b4c2e00 100644 --- a/app/components/workspace-new-container.js +++ b/app/components/workspace-new-container.js @@ -1,11 +1,14 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; import { equal, or } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; import $ from 'jquery'; import moment from 'moment'; -/*global _:false */ import { all } from 'rsvp'; +import isArray from 'lodash-es/isArray'; +import isUndefined from 'lodash-es/isUndefined'; +import keys from 'lodash-es/keys'; +import sortBy from 'lodash-es/sortBy'; export default Component.extend({ elementId: 'workspace-new-container', @@ -225,7 +228,7 @@ export default Component.extend({ ), getMostRecentAnswers: function (answers) { - if (!_.isArray(answers)) { + if (!isArray(answers)) { return []; } const threads = {}; @@ -300,7 +303,7 @@ export default Component.extend({ } let doHideOutlet = this.doHideOutlet; - if (_.isUndefined(doHideOutlet)) { + if (isUndefined(doHideOutlet)) { this.set('doHideOutlet', this.get('model.hideOutlet')); } if (this.doHideOutlet === false) { @@ -510,7 +513,7 @@ export default Component.extend({ // default to alphabetical return defaultSorted; } - let field = _.keys(sortParam)[0]; + let field = keys(sortParam)[0]; let direction = sortParam[field]; if (field === 'explanation') { @@ -530,7 +533,7 @@ export default Component.extend({ } if (field === 'revisions') { - let ascending = _.sortBy(defaultSorted, (answer) => { + let ascending = sortBy(defaultSorted, (answer) => { let student = answer.get('student'); let revisionCount = this.submissionThreads[student].get('length'); return revisionCount; diff --git a/app/components/workspace-new-copy.js b/app/components/workspace-new-copy.js index fa5632d60..5ff0af951 100644 --- a/app/components/workspace-new-copy.js +++ b/app/components/workspace-new-copy.js @@ -1,10 +1,12 @@ import Component from '@ember/component'; import { computed, observer } from '@ember/object'; import { equal } from '@ember/object/computed'; -/*global _:false */ import { later } from '@ember/runloop'; import { inject as service } from '@ember/service'; import $ from 'jquery'; +import isString from 'lodash-es/isString'; +import isNull from 'lodash-es/isNull'; +import each from 'lodash-es/each'; import CurrentUserMixin from '../mixins/current_user_mixin'; export default Component.extend(CurrentUserMixin, { @@ -399,7 +401,7 @@ export default Component.extend(CurrentUserMixin, { 'store', function () { let id = this.get('newFolderSetOptions.existingFolderSetToUse'); - if (!_.isString(id)) { + if (!isString(id)) { return null; } let record = this.store.peekRecord('folder-set', id); @@ -424,7 +426,7 @@ export default Component.extend(CurrentUserMixin, { ), selectedConfigDisplay: computed('newWsConfig', function () { - if (_.isNull(this.newWsConfig)) { + if (isNull(this.newWsConfig)) { return; } const hash = { @@ -557,7 +559,7 @@ export default Component.extend(CurrentUserMixin, { 'newWsName', 'newFolderSetOptions', ]; - _.each(propsToReset, (prop) => { + each(propsToReset, (prop) => { if (prop) { this.set(prop, null); } diff --git a/app/components/workspace-new-settings.js b/app/components/workspace-new-settings.js index af9e9b095..dd6f26569 100644 --- a/app/components/workspace-new-settings.js +++ b/app/components/workspace-new-settings.js @@ -1,7 +1,9 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isObject from 'lodash-es/isObject'; +import isString from 'lodash-es/isString'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'workspace-new-settings', @@ -136,7 +138,7 @@ export default Component.extend({ let peeked = this.store.peekAll('user'); let collabs = this.selectedCollaborators; - if (!_.isObject(peeked)) { + if (!isObject(peeked)) { return []; } let filtered = peeked.reject((record) => { @@ -165,9 +167,9 @@ export default Component.extend({ } workspacePermissions.forEach((obj) => { let user = obj.user; - if (_.isString(user)) { + if (isString(user)) { hash[user] = true; - } else if (_.isObject(user)) { + } else if (isObject(user)) { hash[user.get('id')] = true; } }); @@ -181,7 +183,7 @@ export default Component.extend({ this.set('selectedSubmissionSettings', val); }, updateSelectizeSingle(val, $item, propToUpdate, model) { - if (_.isNull($item)) { + if (isNull($item)) { this.set(propToUpdate, null); return; } diff --git a/app/components/ws-copy-config.js b/app/components/ws-copy-config.js index 2744ef791..6913079f0 100644 --- a/app/components/ws-copy-config.js +++ b/app/components/ws-copy-config.js @@ -1,8 +1,9 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; import { equal } from '@ember/object/computed'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isObject from 'lodash-es/isObject'; +import isArray from 'lodash-es/isArray'; export default Component.extend({ elementId: 'ws-copy-config', @@ -59,11 +60,11 @@ export default Component.extend({ let isAllSubmissions; let customSubmissionsCount; - if (_.isObject(submissionOptions)) { + if (isObject(submissionOptions)) { isAllSubmissions = submissionOptions.all === true; let customIds = submissionOptions.submissionIds; - if (_.isArray(customIds)) { + if (isArray(customIds)) { customSubmissionsCount = customIds.length; } } diff --git a/app/components/ws-copy-custom-config.js b/app/components/ws-copy-custom-config.js index 086b2fc6c..1805b91c4 100644 --- a/app/components/ws-copy-custom-config.js +++ b/app/components/ws-copy-custom-config.js @@ -1,8 +1,11 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ import { alias, equal } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import without from 'lodash-es/without'; +import chain from 'lodash-es/chain'; +import isNull from 'lodash-es/isNull'; +import contains from 'lodash-es/contains'; export default Component.extend({ elementId: 'ws-copy-custom-config', @@ -285,7 +288,7 @@ export default Component.extend({ if (!threads || !this.utils.isNonEmptyArray(students)) { return []; } - return _.chain(students) + return chain(students) .map((student) => threads.get(student)) .flatten() .value(); @@ -372,7 +375,7 @@ export default Component.extend({ return; } // removal - if (_.isNull($item)) { + if (isNull($item)) { this.get(propToUpdate).removeObject(val); return; } @@ -403,7 +406,7 @@ export default Component.extend({ keys = ['all', 'includeStructureOnly', 'none']; } - if (!_.contains(keys, val)) { + if (!contains(keys, val)) { return; } const propToToggle = `${propName}.${val}`; @@ -411,9 +414,9 @@ export default Component.extend({ this.set(propToToggle, true); } - const without = _.without(keys, val); + const newList = without(keys, val); - without.forEach((key) => { + newList.forEach((key) => { let prop = `${propName}.${key}`; if (this.get(prop)) { this.set(prop, false); diff --git a/app/components/ws-copy-owner-settings.js b/app/components/ws-copy-owner-settings.js index 1313e8189..f7f362b2b 100644 --- a/app/components/ws-copy-owner-settings.js +++ b/app/components/ws-copy-owner-settings.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; import CurrentUserMixin from '../mixins/current_user_mixin'; export default Component.extend(CurrentUserMixin, { @@ -222,7 +222,7 @@ export default Component.extend(CurrentUserMixin, { if (!val) { return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedOwner', null); return; @@ -234,7 +234,7 @@ export default Component.extend(CurrentUserMixin, { if (!val) { return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('existingFolderSetToUse', null); return; diff --git a/app/components/ws-copy-permissions.js b/app/components/ws-copy-permissions.js index 470b1b458..b7f3c644d 100644 --- a/app/components/ws-copy-permissions.js +++ b/app/components/ws-copy-permissions.js @@ -1,7 +1,10 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isArray from 'lodash-es/isArray'; +import isString from 'lodash-es/isString'; +import isObject from 'lodash-es/isObject'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'ws-copy-permissions', @@ -11,12 +14,12 @@ export default Component.extend({ didReceiveAttrs() { // set already saved permissions in case user went back to previous step and then came back to permissions const newWsPermissions = this.newWsPermissions; - if (_.isArray(newWsPermissions)) { + if (isArray(newWsPermissions)) { let copy = [...newWsPermissions]; // find record in store based off id in order to display username in collab list copy.forEach((obj) => { let user = obj.user; - if (_.isString(user)) { + if (isString(user)) { let record = this.store.peekRecord('user', user); if (record) { obj.user = record; @@ -40,7 +43,7 @@ export default Component.extend({ let peeked = this.store.peekAll('user'); let collabs = this.selectedCollaborators; - if (!_.isObject(peeked)) { + if (!isObject(peeked)) { return []; } let filtered = peeked.reject((record) => { @@ -72,9 +75,9 @@ export default Component.extend({ } permissions.forEach((permission) => { let user = permission.user; - if (_.isString(user)) { + if (isString(user)) { hash[user] = true; - } else if (_.isObject(user)) { + } else if (isObject(user)) { hash[user.get('id')] = true; } }); @@ -87,7 +90,7 @@ export default Component.extend({ return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedCollaborator', null); return; diff --git a/app/components/ws-copy-workspace.js b/app/components/ws-copy-workspace.js index 9e65f44e1..4e36c6872 100644 --- a/app/components/ws-copy-workspace.js +++ b/app/components/ws-copy-workspace.js @@ -1,7 +1,7 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; -/*global _:false */ -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'ws-copy-workspace', @@ -46,7 +46,7 @@ export default Component.extend({ return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedWorkspace', null); return; diff --git a/app/components/ws-new-settings-permissions.js b/app/components/ws-new-settings-permissions.js index 24e662958..0699cf7a8 100644 --- a/app/components/ws-new-settings-permissions.js +++ b/app/components/ws-new-settings-permissions.js @@ -1,7 +1,6 @@ -/*global _:false */ -import { inject as service } from '@ember/service'; - import Component from '@ember/component'; +import { service } from '@ember/service'; +import isNull from 'lodash-es/isNull'; export default Component.extend({ elementId: 'ws-new-settings-permissions', @@ -113,7 +112,7 @@ export default Component.extend({ return; } - const isRemoval = _.isNull($item); + const isRemoval = isNull($item); if (isRemoval) { this.set('selectedCollaborator', null); return; diff --git a/app/components/ws-permissions-new.js b/app/components/ws-permissions-new.js index 18bd7c472..6f0072675 100644 --- a/app/components/ws-permissions-new.js +++ b/app/components/ws-permissions-new.js @@ -1,8 +1,9 @@ import Component from '@ember/component'; import { computed, observer } from '@ember/object'; -/*global _:false */ import { equal } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; +import each from 'lodash-es/each'; +import isArray from 'lodash-es/isArray'; export default Component.extend({ elementId: 'ws-permissions-new', @@ -250,7 +251,7 @@ export default Component.extend({ if (utils.isNonEmptyObject(userPermissions)) { //prefill for editing - _.each( + each( ['folders', 'comments', 'selections', 'feedback', 'global'], (prop) => { let val = userPermissions[prop]; @@ -266,7 +267,7 @@ export default Component.extend({ this.set('submissions', 'all'); } else if (submissions.userOnly === true) { this.set('submissions', 'userOnly'); - } else if (_.isArray(submissions.submissionIds)) { + } else if (isArray(submissions.submissionIds)) { this.set('submissions', 'custom'); this.set('customSubmissionIds', [...submissions.submissionIds]); } diff --git a/app/helpers/is-empty.js b/app/helpers/is-empty.js index d4c52120d..4e8ea684c 100644 --- a/app/helpers/is-empty.js +++ b/app/helpers/is-empty.js @@ -1,4 +1,4 @@ -import isEmpty from 'lodash/isEmpty'; +import isEmpty from 'lodash-es/isEmpty'; export default function (value) { return isEmpty(value); diff --git a/app/helpers/is-equal.js b/app/helpers/is-equal.js index 055a0431f..7bc5507b0 100644 --- a/app/helpers/is-equal.js +++ b/app/helpers/is-equal.js @@ -1,4 +1,4 @@ -import isEqual from 'lodash/isEqual'; +import isEqual from 'lodash-es/isEqual'; export default function (leftSide, rightSide) { return isEqual(leftSide, rightSide); diff --git a/app/helpers/not-empty.js b/app/helpers/not-empty.js index 7c574eaff..8b2ae2d14 100644 --- a/app/helpers/not-empty.js +++ b/app/helpers/not-empty.js @@ -1,4 +1,4 @@ -import isEmpty from 'lodash/isEmpty'; +import isEmpty from 'lodash-es/isEmpty'; export default function (value) { return !isEmpty(value); diff --git a/app/routes/submissions/submission.js b/app/routes/submissions/submission.js index 3858769c5..ceeacaf25 100644 --- a/app/routes/submissions/submission.js +++ b/app/routes/submissions/submission.js @@ -6,12 +6,12 @@ * @since 1.0.1 * @see workspace_submissions_route */ -/*global _:false */ import Route from '@ember/routing/route'; import { schedule } from '@ember/runloop'; -import { inject as service } from '@ember/service'; +import { service } from '@ember/service'; import $ from 'jquery'; import { resolve } from 'rsvp'; +import keys from 'lodash-es/keys'; import CurrentUserMixin from '../mixins/current_user_mixin'; import VmtHostMixin from '../mixins/vmt-host'; @@ -139,7 +139,7 @@ export default Route.extend(CurrentUserMixin, VmtHostMixin, { lcFolders[f.get('name').toLowerCase().replace(/\s+/g, '')] = f; }); tags.forEach(function (tag) { - if (_.keys(lcFolders).includes(tag)) { + if (keys(lcFolders).includes(tag)) { route.send( 'fileSelectionInFolder', selection.get('id'), diff --git a/app/services/socket-io.js b/app/services/socket-io.js index 6c5be8486..b7a0a860a 100644 --- a/app/services/socket-io.js +++ b/app/services/socket-io.js @@ -1,6 +1,7 @@ /*global io:false */ -/*global _:false */ import Service, { inject as service } from '@ember/service'; +import each from 'lodash-es/each'; +import isEqual from 'lodash-es/isEqual'; export default Service.extend({ currentUser: service('current-user').user, @@ -21,7 +22,7 @@ export default Service.extend({ } socket.on('NEW_NOTIFICATION', (data) => { - _.each(data, (val, key) => { + each(data, (val, key) => { if (val) { this.store.pushPayload({ [key]: val, @@ -269,7 +270,7 @@ export default Service.extend({ return peekedResponseThreads.find((thread) => { return ( thread.get('threadType') === threadType && - _.isEqual(thread.get('id'), uniqueIdentifier) + isEqual(thread.get('id'), uniqueIdentifier) ); }); }, diff --git a/app/services/string-similarity.js b/app/services/string-similarity.js index 3774405d0..fc7e18949 100644 --- a/app/services/string-similarity.js +++ b/app/services/string-similarity.js @@ -1,5 +1,7 @@ -/*global _:false */ import Service from '@ember/service'; +import isString from 'lodash-es/isString'; +import isArray from 'lodash-es/isArray'; +import difference from 'lodash-es/difference'; export default Service.extend({ compareTwoStrings(str1, str2) { @@ -26,7 +28,7 @@ export default Service.extend({ let intersection = 0; pairs1.forEach((pair1) => { //eslint-disable-next-line - for (let i = 0, pair2; pair2 = pairs2[i]; i++) { + for (let i = 0, pair2; (pair2 = pairs2[i]); i++) { if (pair1 !== pair2) { continue; //eslint-disable-line } @@ -91,15 +93,15 @@ export default Service.extend({ // trims, converts to lowercase, splits into words, removes any stopwords and then rejoins to string convertStringForCompare(str, stopwords) { - if (!_.isString(str)) { + if (!isString(str)) { return; } let lower = str.trim().toLowerCase(); let tokens = lower.split(' '); - if (_.isArray(stopwords)) { - tokens = _.difference(tokens, stopwords); + if (isArray(stopwords)) { + tokens = difference(tokens, stopwords); } return tokens.join(''); diff --git a/package.json b/package.json index cc766e705..47915851e 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "jsonwebtoken": "^8.5.1", "loader.js": "^4.7.0", "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "log4js": "^6.9.1", "moment": "^2.30.1", "mongoose": "^5.13.22", From 8a4dd2d7b41f0628257e9c19a37acd136294b3a1 Mon Sep 17 00:00:00 2001 From: Irv Katz <60225276+exidy80@users.noreply.github.com> Date: Fri, 2 May 2025 15:17:12 -0400 Subject: [PATCH 2/2] remove old lodash package --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 47915851e..4b51f28aa 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,6 @@ "jquery": "^3.7.1", "jsonwebtoken": "^8.5.1", "loader.js": "^4.7.0", - "lodash": "^4.17.21", "lodash-es": "^4.17.21", "log4js": "^6.9.1", "moment": "^2.30.1",