From dd68dec05c61a2ce89059f57337480b27cb3e402 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Wed, 21 Feb 2024 13:45:08 -0700 Subject: [PATCH] moved stuff around and added duplicate option. --- Controllers/VehicleController.cs | 78 ++++- Views/Vehicle/_CollisionRecords.cshtml | 1 + Views/Vehicle/_Gas.cshtml | 1 + Views/Vehicle/_Notes.cshtml | 1 + Views/Vehicle/_OdometerRecords.cshtml | 1 + Views/Vehicle/_ReminderRecords.cshtml | 1 + Views/Vehicle/_ServiceRecords.cshtml | 1 + Views/Vehicle/_SupplyRecords.cshtml | 1 + Views/Vehicle/_TaxRecords.cshtml | 1 + Views/Vehicle/_UpgradeRecords.cshtml | 1 + wwwroot/js/shared.js | 380 ++++++++++++++++++++++++- wwwroot/js/vehicle.js | 308 +------------------- 12 files changed, 466 insertions(+), 309 deletions(-) diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 62bdeb8..556ea0e 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -1463,7 +1463,8 @@ namespace CarCareTracker.Controllers _logger.LogError("Unable to update reminder because it no longer exists."); return false; } - } catch (Exception ex) + } + catch (Exception ex) { _logger.LogError(ex.Message); return false; @@ -2139,7 +2140,6 @@ namespace CarCareTracker.Controllers } public IActionResult DeleteRecords(List recordIds, ImportMode importMode) { - var genericRecord = new GenericRecord(); bool result = false; foreach (int recordId in recordIds) { @@ -2176,6 +2176,80 @@ namespace CarCareTracker.Controllers } return Json(result); } + public IActionResult DuplicateRecords(List recordIds, ImportMode importMode) + { + bool result = false; + foreach (int recordId in recordIds) + { + switch (importMode) + { + case ImportMode.ServiceRecord: + { + var existingRecord = _serviceRecordDataAccess.GetServiceRecordById(recordId); + existingRecord.Id = default; + result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(existingRecord); + } + break; + case ImportMode.RepairRecord: + { + var existingRecord = _collisionRecordDataAccess.GetCollisionRecordById(recordId); + existingRecord.Id = default; + result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(existingRecord); + } + break; + case ImportMode.UpgradeRecord: + { + var existingRecord = _upgradeRecordDataAccess.GetUpgradeRecordById(recordId); + existingRecord.Id = default; + result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(existingRecord); + } + break; + case ImportMode.GasRecord: + { + var existingRecord = _gasRecordDataAccess.GetGasRecordById(recordId); + existingRecord.Id = default; + result = _gasRecordDataAccess.SaveGasRecordToVehicle(existingRecord); + } + break; + case ImportMode.TaxRecord: + { + var existingRecord = _taxRecordDataAccess.GetTaxRecordById(recordId); + existingRecord.Id = default; + result = _taxRecordDataAccess.SaveTaxRecordToVehicle(existingRecord); + } + break; + case ImportMode.SupplyRecord: + { + var existingRecord = _supplyRecordDataAccess.GetSupplyRecordById(recordId); + existingRecord.Id = default; + result = _supplyRecordDataAccess.SaveSupplyRecordToVehicle(existingRecord); + } + break; + case ImportMode.NoteRecord: + { + var existingRecord = _noteDataAccess.GetNoteById(recordId); + existingRecord.Id = default; + result = _noteDataAccess.SaveNoteToVehicle(existingRecord); + } + break; + case ImportMode.OdometerRecord: + { + var existingRecord = _odometerRecordDataAccess.GetOdometerRecordById(recordId); + existingRecord.Id = default; + result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(existingRecord); + } + break; + case ImportMode.ReminderRecord: + { + var existingRecord = _reminderRecordDataAccess.GetReminderRecordById(recordId); + existingRecord.Id = default; + result = _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingRecord); + } + break; + } + } + return Json(result); + } #endregion } diff --git a/Views/Vehicle/_CollisionRecords.cshtml b/Views/Vehicle/_CollisionRecords.cshtml index 9fbead2..6850cb8 100644 --- a/Views/Vehicle/_CollisionRecords.cshtml +++ b/Views/Vehicle/_CollisionRecords.cshtml @@ -97,5 +97,6 @@
  • @translator.Translate(userLanguage, "Service Records")
  • @translator.Translate(userLanguage, "Upgrades")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_Gas.cshtml b/Views/Vehicle/_Gas.cshtml index c08c156..2324266 100644 --- a/Views/Vehicle/_Gas.cshtml +++ b/Views/Vehicle/_Gas.cshtml @@ -140,6 +140,7 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • diff --git a/Views/Vehicle/_Notes.cshtml b/Views/Vehicle/_Notes.cshtml index 4c035c3..17ff8a5 100644 --- a/Views/Vehicle/_Notes.cshtml +++ b/Views/Vehicle/_Notes.cshtml @@ -72,5 +72,6 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_OdometerRecords.cshtml b/Views/Vehicle/_OdometerRecords.cshtml index 33f947b..2b10254 100644 --- a/Views/Vehicle/_OdometerRecords.cshtml +++ b/Views/Vehicle/_OdometerRecords.cshtml @@ -88,5 +88,6 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_ReminderRecords.cshtml b/Views/Vehicle/_ReminderRecords.cshtml index 9bd3ae3..c57ae23 100644 --- a/Views/Vehicle/_ReminderRecords.cshtml +++ b/Views/Vehicle/_ReminderRecords.cshtml @@ -105,5 +105,6 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_ServiceRecords.cshtml b/Views/Vehicle/_ServiceRecords.cshtml index e3bb54b..3825455 100644 --- a/Views/Vehicle/_ServiceRecords.cshtml +++ b/Views/Vehicle/_ServiceRecords.cshtml @@ -98,5 +98,6 @@
  • @translator.Translate(userLanguage, "Repairs")
  • @translator.Translate(userLanguage, "Upgrades")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_SupplyRecords.cshtml b/Views/Vehicle/_SupplyRecords.cshtml index 4ceb309..6ec35ac 100644 --- a/Views/Vehicle/_SupplyRecords.cshtml +++ b/Views/Vehicle/_SupplyRecords.cshtml @@ -97,5 +97,6 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_TaxRecords.cshtml b/Views/Vehicle/_TaxRecords.cshtml index 2041356..b35f850 100644 --- a/Views/Vehicle/_TaxRecords.cshtml +++ b/Views/Vehicle/_TaxRecords.cshtml @@ -91,5 +91,6 @@
  • @translator.Translate(userLanguage, "Select All")
  • @translator.Translate(userLanguage, "Deselect All")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/Views/Vehicle/_UpgradeRecords.cshtml b/Views/Vehicle/_UpgradeRecords.cshtml index 06e7a96..151a88a 100644 --- a/Views/Vehicle/_UpgradeRecords.cshtml +++ b/Views/Vehicle/_UpgradeRecords.cshtml @@ -96,5 +96,6 @@
  • @translator.Translate(userLanguage, "Service Records")
  • @translator.Translate(userLanguage, "Repairs")
  • +
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • \ No newline at end of file diff --git a/wwwroot/js/shared.js b/wwwroot/js/shared.js index 345a65d..8d64f58 100644 --- a/wwwroot/js/shared.js +++ b/wwwroot/js/shared.js @@ -422,4 +422,382 @@ function toggleSupplyUsageHistory() { } else { container.addClass("d-none"); } -} \ No newline at end of file +} +function moveRecords(ids, source, dest) { + if (ids.length == 0) { + return; + } + $("#workAroundInput").show(); + var friendlySource = ""; + var friendlyDest = ""; + var refreshDataCallBack; + var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record"; + switch (source) { + case "ServiceRecord": + friendlySource = "Service Records"; + refreshDataCallBack = getVehicleServiceRecords; + break; + case "RepairRecord": + friendlySource = "Repairs"; + refreshDataCallBack = getVehicleCollisionRecords; + break; + case "UpgradeRecord": + friendlySource = "Upgrades"; + refreshDataCallBack = getVehicleUpgradeRecords; + break; + } + switch (dest) { + case "ServiceRecord": + friendlyDest = "Service Records"; + break; + case "RepairRecord": + friendlyDest = "Repairs"; + break; + case "UpgradeRecord": + friendlyDest = "Upgrades"; + break; + } + + Swal.fire({ + title: "Confirm Move?", + text: `Move ${recordVerbiage} from ${friendlySource} to ${friendlyDest}?`, + showCancelButton: true, + confirmButtonText: "Move", + confirmButtonColor: "#dc3545" + }).then((result) => { + if (result.isConfirmed) { + $.post('/Vehicle/MoveRecords', { recordIds: ids, source: source, destination: dest }, function (data) { + if (data) { + successToast(`${ids.length} Records Moved`); + var vehicleId = GetVehicleId().vehicleId; + refreshDataCallBack(vehicleId); + } else { + errorToast(genericErrorMessage()); + } + }); + } else { + $("#workAroundInput").hide(); + } + }); +} +function deleteRecords(ids, source) { + if (ids.length == 0) { + return; + } + $("#workAroundInput").show(); + var friendlySource = ""; + var refreshDataCallBack; + var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record"; + switch (source) { + case "ServiceRecord": + friendlySource = "Service Records"; + refreshDataCallBack = getVehicleServiceRecords; + break; + case "RepairRecord": + friendlySource = "Repairs"; + refreshDataCallBack = getVehicleCollisionRecords; + break; + case "UpgradeRecord": + friendlySource = "Upgrades"; + refreshDataCallBack = getVehicleUpgradeRecords; + break; + case "TaxRecord": + friendlySource = "Taxes"; + refreshDataCallBack = getVehicleTaxRecords; + break; + case "SupplyRecord": + friendlySource = "Supplies"; + refreshDataCallBack = getVehicleSupplyRecords; + break; + case "NoteRecord": + friendlySource = "Notes"; + refreshDataCallBack = getVehicleNotes; + break; + case "OdometerRecord": + friendlySource = "Odometer Records"; + refreshDataCallBack = getVehicleOdometerRecords; + break; + case "ReminderRecord": + friendlySource = "Reminders"; + refreshDataCallBack = getVehicleReminders; + break; + case "GasRecord": + friendlySource = "Fuel Records"; + refreshDataCallBack = getVehicleGasRecords; + break; + } + + Swal.fire({ + title: "Confirm Delete?", + text: `Delete ${recordVerbiage} from ${friendlySource}?`, + showCancelButton: true, + confirmButtonText: "Delete", + confirmButtonColor: "#dc3545" + }).then((result) => { + if (result.isConfirmed) { + $.post('/Vehicle/DeleteRecords', { recordIds: ids, importMode: source }, function (data) { + if (data) { + successToast(`${ids.length} Records Deleted`); + var vehicleId = GetVehicleId().vehicleId; + refreshDataCallBack(vehicleId); + } else { + errorToast(genericErrorMessage()); + } + }); + } else { + $("#workAroundInput").hide(); + } + }); +} +function duplicateRecords(ids, source) { + if (ids.length == 0) { + return; + } + $("#workAroundInput").show(); + var friendlySource = ""; + var refreshDataCallBack; + var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record"; + switch (source) { + case "ServiceRecord": + friendlySource = "Service Records"; + refreshDataCallBack = getVehicleServiceRecords; + break; + case "RepairRecord": + friendlySource = "Repairs"; + refreshDataCallBack = getVehicleCollisionRecords; + break; + case "UpgradeRecord": + friendlySource = "Upgrades"; + refreshDataCallBack = getVehicleUpgradeRecords; + break; + case "TaxRecord": + friendlySource = "Taxes"; + refreshDataCallBack = getVehicleTaxRecords; + break; + case "SupplyRecord": + friendlySource = "Supplies"; + refreshDataCallBack = getVehicleSupplyRecords; + break; + case "NoteRecord": + friendlySource = "Notes"; + refreshDataCallBack = getVehicleNotes; + break; + case "OdometerRecord": + friendlySource = "Odometer Records"; + refreshDataCallBack = getVehicleOdometerRecords; + break; + case "ReminderRecord": + friendlySource = "Reminders"; + refreshDataCallBack = getVehicleReminders; + break; + case "GasRecord": + friendlySource = "Fuel Records"; + refreshDataCallBack = getVehicleGasRecords; + break; + } + + Swal.fire({ + title: "Confirm Duplicate?", + text: `Duplicate ${recordVerbiage}?`, + showCancelButton: true, + confirmButtonText: "Duplicate", + confirmButtonColor: "#dc3545" + }).then((result) => { + if (result.isConfirmed) { + $.post('/Vehicle/DuplicateRecords', { recordIds: ids, importMode: source }, function (data) { + if (data) { + successToast(`${ids.length} Records Duplicated`); + var vehicleId = GetVehicleId().vehicleId; + refreshDataCallBack(vehicleId); + } else { + errorToast(genericErrorMessage()); + } + }); + } else { + $("#workAroundInput").hide(); + } + }); +} +var selectedRow = []; +var isDragging = false; +$(window).on('mouseup', function (e) { + rangeMouseUp(e); +}); +$(window).on('mousedown', function (e) { + rangeMouseDown(e); +}); +$(window).on('keydown', function (e) { + var userOnInput = $(e.target).is("input") || $(e.target).is("textarea"); + if (!userOnInput) { + if (e.ctrlKey && e.which == 65) { + e.preventDefault(); + e.stopPropagation(); + selectAllRows(); + } + } +}) +function selectAllRows() { + clearSelectedRows(); + $('.vehicleDetailTabContainer .table tbody tr:visible').addClass('table-active'); + $('.vehicleDetailTabContainer .table tbody tr:visible').map((index, elem) => { + addToSelectedRows($(elem).attr('data-rowId')); + }); +} +function rangeMouseDown(e) { + if (isRightClick(e)) { + return; + } + var contextMenuAction = $(e.target).is(".table-context-menu > li > .dropdown-item") + if (!e.ctrlKey && !contextMenuAction) { + clearSelectedRows(); + } + isDragging = true; + + document.documentElement.onselectstart = function () { return false; }; +} +function isRightClick(e) { + if (e.which) { + return (e.which == 3); + } else if (e.button) { + return (e.button == 2); + } + return false; +} +function rangeMouseUp(e) { + if ($(".table-context-menu").length > 0) { + $(".table-context-menu").hide(); + } + if (isRightClick(e)) { + return; + } + isDragging = false; + document.documentElement.onselectstart = function () { return true; }; +} +function rangeMouseMove(e) { + if (isDragging) { + if (!$(e).hasClass('table-active')) { + addToSelectedRows($(e).attr('data-rowId')); + $(e).addClass('table-active'); + } + } +} +function addToSelectedRows(id) { + if (selectedRow.findIndex(x => x == id) == -1) { + selectedRow.push(id); + } +} +function removeFromSelectedRows(id) { + var rowIndex = selectedRow.findIndex(x => x == id) + if (rowIndex != -1) { + selectedRow.splice(rowIndex, 1); + } +} +function clearSelectedRows() { + selectedRow = []; + $('.table tr').removeClass('table-active'); +} +function showTableContextMenu(e) { + if (event != undefined) { + event.preventDefault(); + } + $(".table-context-menu").show(); + determineContextMenuItems(); + $(".table-context-menu").css({ + position: "absolute", + left: getMenuPosition(event.clientX, 'width', 'scrollLeft'), + top: getMenuPosition(event.clientY, 'height', 'scrollTop') + }); + if (!$(e).hasClass('table-active')) { + clearSelectedRows(); + addToSelectedRows($(e).attr('data-rowId')); + $(e).addClass('table-active'); + } +} +function determineContextMenuItems() { + var tableRows = $('.table tbody tr:visible'); + var tableRowsActive = $('.table tr.table-active'); + if (tableRowsActive.length == 1) { + //only one row selected + $(".context-menu-active-single").show(); + $(".context-menu-active-multiple").hide(); + } else if (tableRowsActive.length > 1) { + //multiple rows selected + $(".context-menu-active-single").hide(); + $(".context-menu-active-multiple").show(); + } else { + //nothing was selected, bug case. + $(".context-menu-active-single").hide(); + $(".context-menu-active-multiple").hide(); + } + if (tableRows.length > 1) { + $(".context-menu-multiple").show(); + if (tableRows.length == tableRowsActive.length) { + //all rows are selected, show deselect all button. + $(".context-menu-deselect-all").show(); + $(".context-menu-select-all").hide(); + } else if (tableRows.length != tableRowsActive.length) { + //not all rows are selected, show select all button. + $(".context-menu-select-all").show(); + $(".context-menu-deselect-all").hide(); + } + } else { + $(".context-menu-multiple").hide(); + } +} +function getMenuPosition(mouse, direction, scrollDir) { + var win = $(window)[direction](), + scroll = $(window)[scrollDir](), + menu = $(".table-context-menu")[direction](), + position = mouse + scroll; + + // opening menu would pass the side of the page + if (mouse + menu > win && menu < mouse) + position -= menu; + return position; +} +function handleTableRowClick(e, callBack, rowId) { + if (!event.ctrlKey) { + callBack(rowId); + } else if (!$(e).hasClass('table-active')) { + addToSelectedRows($(e).attr('data-rowId')); + $(e).addClass('table-active'); + } else if ($(e).hasClass('table-active')) { + removeFromSelectedRows($(e).attr('data-rowId')); + $(e).removeClass('table-active'); + } +} + +function showTableContextMenuForMobile(e, xPosition, yPosition) { + if (!$(e).hasClass('table-active')) { + addToSelectedRows($(e).attr('data-rowId')); + $(e).addClass('table-active'); + shakeTableRow(e); + } else { + $(".table-context-menu").show(); + determineContextMenuItems(); + $(".table-context-menu").css({ + position: "absolute", + left: getMenuPosition(xPosition, 'width', 'scrollLeft'), + top: getMenuPosition(yPosition, 'height', 'scrollTop') + }); + } +} +function shakeTableRow(e) { + $(e).addClass('tablerow-shake'); + setTimeout(function () { $(e).removeClass('tablerow-shake'); }, 1200) +} +var rowTouchTimer; +var rowTouchDuration = 800; +function detectRowLongTouch(sender) { + var touchX = event.touches[0].clientX; + var touchY = event.touches[0].clientY; + if (!rowTouchTimer) { + rowTouchTimer = setTimeout(function () { showTableContextMenuForMobile(sender, touchX, touchY); detectRowTouchEndPremature(sender); }, rowTouchDuration); + } +} +function detectRowTouchEndPremature(sender) { + if (rowTouchTimer) { + clearTimeout(rowTouchTimer); + rowTouchTimer = null; + } +} diff --git a/wwwroot/js/vehicle.js b/wwwroot/js/vehicle.js index 7e793ad..20046a3 100644 --- a/wwwroot/js/vehicle.js +++ b/wwwroot/js/vehicle.js @@ -328,276 +328,6 @@ function moveRecord(recordId, source, dest) { } }); } -function moveRecords(ids, source, dest) { - if (ids.length == 0) { - return; - } - $("#workAroundInput").show(); - var friendlySource = ""; - var friendlyDest = ""; - var refreshDataCallBack; - var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record"; - switch (source) { - case "ServiceRecord": - friendlySource = "Service Records"; - refreshDataCallBack = getVehicleServiceRecords; - break; - case "RepairRecord": - friendlySource = "Repairs"; - refreshDataCallBack = getVehicleCollisionRecords; - break; - case "UpgradeRecord": - friendlySource = "Upgrades"; - refreshDataCallBack = getVehicleUpgradeRecords; - break; - } - switch (dest) { - case "ServiceRecord": - friendlyDest = "Service Records"; - break; - case "RepairRecord": - friendlyDest = "Repairs"; - break; - case "UpgradeRecord": - friendlyDest = "Upgrades"; - break; - } - - Swal.fire({ - title: "Confirm Move?", - text: `Move ${recordVerbiage} from ${friendlySource} to ${friendlyDest}?`, - showCancelButton: true, - confirmButtonText: "Move", - confirmButtonColor: "#dc3545" - }).then((result) => { - if (result.isConfirmed) { - $.post('/Vehicle/MoveRecords', { recordIds: ids, source: source, destination: dest }, function (data) { - if (data) { - successToast(`${ids.length} Records Moved`); - var vehicleId = GetVehicleId().vehicleId; - refreshDataCallBack(vehicleId); - } else { - errorToast(genericErrorMessage()); - } - }); - } else { - $("#workAroundInput").hide(); - } - }); -} -function deleteRecords(ids, source) { - if (ids.length == 0) { - return; - } - $("#workAroundInput").show(); - var friendlySource = ""; - var refreshDataCallBack; - var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record"; - switch (source) { - case "ServiceRecord": - friendlySource = "Service Records"; - refreshDataCallBack = getVehicleServiceRecords; - break; - case "RepairRecord": - friendlySource = "Repairs"; - refreshDataCallBack = getVehicleCollisionRecords; - break; - case "UpgradeRecord": - friendlySource = "Upgrades"; - refreshDataCallBack = getVehicleUpgradeRecords; - break; - case "TaxRecord": - friendlySource = "Taxes"; - refreshDataCallBack = getVehicleTaxRecords; - break; - case "SupplyRecord": - friendlySource = "Supplies"; - refreshDataCallBack = getVehicleSupplyRecords; - break; - case "NoteRecord": - friendlySource = "Notes"; - refreshDataCallBack = getVehicleNotes; - break; - case "OdometerRecord": - friendlySource = "Odometer Records"; - refreshDataCallBack = getVehicleOdometerRecords; - break; - case "ReminderRecord": - friendlySource = "Reminders"; - refreshDataCallBack = getVehicleReminders; - break; - } - - Swal.fire({ - title: "Confirm Delete?", - text: `Delete ${recordVerbiage} from ${friendlySource}?`, - showCancelButton: true, - confirmButtonText: "Delete", - confirmButtonColor: "#dc3545" - }).then((result) => { - if (result.isConfirmed) { - $.post('/Vehicle/DeleteRecords', { recordIds: ids, importMode: source }, function (data) { - if (data) { - successToast(`${ids.length} Records Deleted`); - var vehicleId = GetVehicleId().vehicleId; - refreshDataCallBack(vehicleId); - } else { - errorToast(genericErrorMessage()); - } - }); - } else { - $("#workAroundInput").hide(); - } - }); -} -var selectedRow = []; -var isDragging = false; -$(window).on('mouseup', function (e) { - rangeMouseUp(e); -}); -$(window).on('mousedown', function (e) { - rangeMouseDown(e); -}); -$(window).on('keydown', function (e) { - var userOnInput = $(e.target).is("input") || $(e.target).is("textarea"); - if (!userOnInput) { - if (e.ctrlKey && e.which == 65) { - e.preventDefault(); - e.stopPropagation(); - selectAllRows(); - } - } -}) -function selectAllRows() { - clearSelectedRows(); - $('.vehicleDetailTabContainer .table tbody tr:visible').addClass('table-active'); - $('.vehicleDetailTabContainer .table tbody tr:visible').map((index, elem) => { - addToSelectedRows($(elem).attr('data-rowId')); - }); -} -function rangeMouseDown(e) { - if (isRightClick(e)) { - return; - } - var contextMenuAction = $(e.target).is(".table-context-menu > li > .dropdown-item") - if (!e.ctrlKey && !contextMenuAction) { - clearSelectedRows(); - } - isDragging = true; - - document.documentElement.onselectstart = function () { return false; }; -} -function isRightClick(e) { - if (e.which) { - return (e.which == 3); - } else if (e.button) { - return (e.button == 2); - } - return false; -} -function rangeMouseUp(e) { - if ($(".table-context-menu").length > 0) { - $(".table-context-menu").hide(); - } - if (isRightClick(e)) { - return; - } - isDragging = false; - document.documentElement.onselectstart = function () { return true; }; -} -function rangeMouseMove(e) { - if (isDragging) { - if (!$(e).hasClass('table-active')) { - addToSelectedRows($(e).attr('data-rowId')); - $(e).addClass('table-active'); - } - } -} -function addToSelectedRows(id) { - if (selectedRow.findIndex(x => x == id) == -1) { - selectedRow.push(id); - } -} -function removeFromSelectedRows(id) { - var rowIndex = selectedRow.findIndex(x => x == id) - if (rowIndex != -1) { - selectedRow.splice(rowIndex, 1); - } -} -function clearSelectedRows() { - selectedRow = []; - $('.table tr').removeClass('table-active'); -} -function showTableContextMenu(e) { - if (event != undefined) { - event.preventDefault(); - } - $(".table-context-menu").show(); - determineContextMenuItems(); - $(".table-context-menu").css({ - position: "absolute", - left: getMenuPosition(event.clientX, 'width', 'scrollLeft'), - top: getMenuPosition(event.clientY, 'height', 'scrollTop') - }); - if (!$(e).hasClass('table-active')) { - clearSelectedRows(); - addToSelectedRows($(e).attr('data-rowId')); - $(e).addClass('table-active'); - } -} -function determineContextMenuItems() { - var tableRows = $('.table tbody tr:visible'); - var tableRowsActive = $('.table tr.table-active'); - if (tableRowsActive.length == 1) { - //only one row selected - $(".context-menu-active-single").show(); - $(".context-menu-active-multiple").hide(); - } else if (tableRowsActive.length > 1) { - //multiple rows selected - $(".context-menu-active-single").hide(); - $(".context-menu-active-multiple").show(); - } else { - //nothing was selected, bug case. - $(".context-menu-active-single").hide(); - $(".context-menu-active-multiple").hide(); - } - if (tableRows.length > 1) { - $(".context-menu-multiple").show(); - if (tableRows.length == tableRowsActive.length) { - //all rows are selected, show deselect all button. - $(".context-menu-deselect-all").show(); - $(".context-menu-select-all").hide(); - } else if (tableRows.length != tableRowsActive.length) { - //not all rows are selected, show select all button. - $(".context-menu-select-all").show(); - $(".context-menu-deselect-all").hide(); - } - } else { - $(".context-menu-multiple").hide(); - } -} -function getMenuPosition(mouse, direction, scrollDir) { - var win = $(window)[direction](), - scroll = $(window)[scrollDir](), - menu = $(".table-context-menu")[direction](), - position = mouse + scroll; - - // opening menu would pass the side of the page - if (mouse + menu > win && menu < mouse) - position -= menu; - return position; -} -function handleTableRowClick(e, callBack, rowId) { - if (!event.ctrlKey) { - callBack(rowId); - } else if (!$(e).hasClass('table-active')) { - addToSelectedRows($(e).attr('data-rowId')); - $(e).addClass('table-active'); - } else if ($(e).hasClass('table-active')) { - removeFromSelectedRows($(e).attr('data-rowId')); - $(e).removeClass('table-active'); - } -} function showRecurringReminderSelector(descriptionFieldName) { $.get(`/Vehicle/GetRecurringReminderRecordsByVehicleId?vehicleId=${GetVehicleId().vehicleId}`, function (data) { if (data) { @@ -609,7 +339,7 @@ function showRecurringReminderSelector(descriptionFieldName) { focusConfirm: false, preConfirm: () => { const selectedRecurringReminder = $("#recurringReminderInput").val(); - const selectedRecurringReminderText = $("#recurringReminderInput").text(); + const selectedRecurringReminderText = $("#recurringReminderInput option:selected").text(); if (!selectedRecurringReminder || parseInt(selectedRecurringReminder) == 0) { Swal.showValidationMessage(`You must select a recurring reminder`); } @@ -628,38 +358,4 @@ function showRecurringReminderSelector(descriptionFieldName) { errorToast(genericErrorMessage()); } }) -} -function showTableContextMenuForMobile(e, xPosition, yPosition) { - if (!$(e).hasClass('table-active')) { - addToSelectedRows($(e).attr('data-rowId')); - $(e).addClass('table-active'); - shakeTableRow(e); - } else { - $(".table-context-menu").show(); - determineContextMenuItems(); - $(".table-context-menu").css({ - position: "absolute", - left: getMenuPosition(xPosition, 'width', 'scrollLeft'), - top: getMenuPosition(yPosition, 'height', 'scrollTop') - }); - } -} -function shakeTableRow(e) { - $(e).addClass('tablerow-shake'); - setTimeout(function () { $(e).removeClass('tablerow-shake'); }, 1200) -} -var rowTouchTimer; -var rowTouchDuration = 800; -function detectRowLongTouch(sender) { - var touchX = event.touches[0].clientX; - var touchY = event.touches[0].clientY; - if (!rowTouchTimer) { - rowTouchTimer = setTimeout(function () { showTableContextMenuForMobile(sender, touchX, touchY); detectRowTouchEndPremature(sender); }, rowTouchDuration); - } -} -function detectRowTouchEndPremature(sender) { - if (rowTouchTimer) { - clearTimeout(rowTouchTimer); - rowTouchTimer = null; - } -} +} \ No newline at end of file