Enable "allocate" button only once the sub-table is expanded

This commit is contained in:
Oliver 2021-10-17 21:13:07 +11:00
parent 87dcaba0d8
commit bd7fef720d
2 changed files with 26 additions and 126 deletions

View File

@ -24,6 +24,7 @@
loadAllocationTable,
loadBuildOrderAllocationTable,
loadBuildOutputAllocationTable,
loadBuildOutputTable,
loadBuildTable,
*/
@ -123,6 +124,9 @@ function makeBuildOutputButtons(output_id, build_info, options={}) {
'button-output-allocate',
output_id,
'{% trans "Allocate stock items to this build output" %}',
{
disabled: true,
}
);
// Add a button to unallocate stock from this build output
@ -157,118 +161,6 @@ function makeBuildOutputButtons(output_id, build_info, options={}) {
}
// TODO "delete me"
function makeBuildOutputActionButtons(output, buildInfo, lines) {
/* Generate action buttons for a build output.
*/
var todo = "delete this function ok";
var buildId = buildInfo.pk;
var partId = buildInfo.part;
var outputId = 'untracked';
if (output) {
outputId = output.pk;
}
var panel = `#allocation-panel-${outputId}`;
function reloadTable() {
$(panel).find(`#allocation-table-${outputId}`).bootstrapTable('refresh');
}
// Find the div where the buttons will be displayed
var buildActions = $(panel).find(`#output-actions-${outputId}`);
var html = `<div class='btn-group float-right' role='group'>`;
if (lines > 0) {
html += makeIconButton(
'fa-sign-in-alt icon-blue', 'button-output-auto', outputId,
'{% trans "Allocate stock items to this build output" %}',
);
}
if (lines > 0) {
// Add a button to "cancel" the particular build output (unallocate)
html += makeIconButton(
'fa-minus-circle icon-red', 'button-output-unallocate', outputId,
'{% trans "Unallocate stock from build output" %}',
);
}
if (output) {
// Add a button to "complete" the particular build output
html += makeIconButton(
'fa-check-circle icon-green', 'button-output-complete', outputId,
'{% trans "Complete build output" %}',
{
// disabled: true
}
);
// Add a button to "delete" the particular build output
html += makeIconButton(
'fa-trash-alt icon-red', 'button-output-delete', outputId,
'{% trans "Delete build output" %}',
);
// TODO - Add a button to "destroy" the particular build output (mark as damaged, scrap)
}
html += '</div>';
buildActions.html(html);
// Add callbacks for the buttons
$(panel).find(`#button-output-auto-${outputId}`).click(function() {
var bom_items = $(panel).find(`#allocation-table-${outputId}`).bootstrapTable('getData');
// Launch modal dialog to perform auto-allocation
allocateStockToBuild(
buildId,
partId,
bom_items,
{
source_location: buildInfo.source_location,
output: outputId,
success: reloadTable,
}
);
});
$(panel).find(`#button-output-unallocate-${outputId}`).click(function() {
var pk = $(this).attr('pk');
unallocateStock(buildId, {
output: pk,
table: table,
});
});
$(panel).find(`#button-output-delete-${outputId}`).click(function() {
var pk = $(this).attr('pk');
launchModalForm(
`/build/${buildId}/delete-output/`,
{
reload: true,
data: {
output: pk
}
}
);
});
}
/*
* Unallocate stock against a particular build order
*
@ -572,9 +464,6 @@ function loadBuildOutputTable(build_info, options={}) {
$(table).find('.button-output-allocate').click(function() {
var pk = $(this).attr('pk');
// TODO
var todo = "Work out which stock items we need to allocate and launch the form";
// Find the "allocation" sub-table associated with this output
var subtable = $(`#output-sub-table-${pk}`);
@ -666,6 +555,7 @@ function loadBuildOutputTable(build_info, options={}) {
row,
{
table: `#${sub_table_id}`,
parent_table: table,
}
);
}
@ -695,7 +585,6 @@ function loadBuildOutputTable(build_info, options={}) {
setupBuildOutputButtonCallbacks();
$(table).bootstrapTable('expandAllRows');
// $(table).bootstrapTable('collapseAllRows');
},
columns: [
{
@ -751,7 +640,17 @@ function loadBuildOutputTable(build_info, options={}) {
}
}
]
});
});
// Enable the "allocate" button when the sub-table is exanded
$(table).on('expand-row.bs.table', function(detail, index, row) {
$(`#button-output-allocate-${row.pk}`).prop('disabled', false);
});
// Disable the "allocate" button when the sub-table is collapsed
$(table).on('collapse-row.bs.table', function(detail, index, row) {
$(`#button-output-allocate-${row.pk}`).prop('disabled', true);
});
}
@ -936,7 +835,10 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
name: 'build-allocation',
uniqueId: 'sub_part',
search: options.search || false,
onPostBody: setupCallbacks,
onPostBody: function(data) {
// Setup button callbacks
setupCallbacks();
},
onLoadSuccess: function(tableData) {
// Once the BOM data are loaded, request allocation data for this build output
@ -1031,9 +933,6 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
} else {
console.log(`WARNING: Could not find progress bar for output ${outputId}`);
}
// Update the available actions for this build output
makeBuildOutputActionButtons(output, buildInfo, totalLines);
}
}
);
@ -1288,9 +1187,6 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
},
]
});
// Initialize the action buttons
makeBuildOutputActionButtons(output, buildInfo, 0);
}

View File

@ -87,8 +87,10 @@ function select2Thumbnail(image) {
}
/*
* Construct an 'icon badge' which floats to the right of an object
*/
function makeIconBadge(icon, title) {
// Construct an 'icon badge' which floats to the right of an object
var html = `<span class='fas ${icon} label-right' title='${title}'></span>`;
@ -96,8 +98,10 @@ function makeIconBadge(icon, title) {
}
/*
* Construct an 'icon button' using the fontawesome set
*/
function makeIconButton(icon, cls, pk, title, options={}) {
// Construct an 'icon button' using the fontawesome set
var classes = `btn btn-default btn-glyph ${cls}`;