Просмотр исходного кода

added main multi-select function

CroogQT 3 лет назад
Родитель
Сommit
ea9258d36c
1 измененных файлов с 37 добавлено и 0 удалено
  1. 37 0
      netbox/project-static/src/buttons/selectMultiple.ts

+ 37 - 0
netbox/project-static/src/buttons/selectMultiple.ts

@@ -9,6 +9,43 @@ function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state:
   state.set('element', eventTargetElement);
 }
 
+function handlePkCheck(event: _MouseEvent, state: StateManager<PreviousPkCheckState>): void {
+  const eventTargetElement = event.target as HTMLInputElement;
+  const previousStateElement = state.get('element');
+  updatePreviousPkCheckState(eventTargetElement, state);
+  //Stop if user is not holding shift key
+  if(event.shiftKey === false){
+    return
+  }
+  //If no previous state, store event target element as previous state and return
+  if (previousStateElement === null) {
+    return updatePreviousPkCheckState(eventTargetElement, state);
+  }
+  const checkboxList = getElements<HTMLInputElement>('input[type="checkbox"][name="pk"]');
+  let changePkCheckboxState = false;
+  for(const element of checkboxList){
+    //The previously clicked checkbox was above the shift clicked checkbox 
+    if(element === previousStateElement){
+      if(changePkCheckboxState === true){
+        changePkCheckboxState = false;
+        return 
+      }
+      changePkCheckboxState = true;
+    }
+    //Change loop's current checkbox state to eventTargetElement checkbox state
+    if(changePkCheckboxState === true){
+      element.checked = eventTargetElement.checked;
+    }
+    //The previously clicked checkbox was below the shift clicked checkbox 
+    if(element === eventTargetElement){
+      if(changePkCheckboxState === true){
+        changePkCheckboxState = false
+        return
+      }
+      changePkCheckboxState = true;
+    }
+  }
+}
 
 export function initSelectMultiple(): void {
   const checkboxElements = getElements<HTMLInputElement>('input[type="checkbox"][name="pk"]');