blob: 5fa942b13b6f43cb9640ace526d897e2719a4028 [file] [log] [blame]
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import m from 'mithril';
import {globals} from '../globals';
import {fullscreenModalContainer, ModalDefinition} from '../modal';
import {AnyAttrsVnode} from '../panel_container';
import {ArgumentPopup} from '../pivot_table_argument_popup';
export class AttributeModalHolder {
showModal = false;
typedArgument = '';
callback: (arg: string) => void;
constructor(callback: (arg: string) => void) {
this.callback = callback;
}
start() {
this.showModal = true;
fullscreenModalContainer.createNew(this.renderModal());
globals.rafScheduler.scheduleFullRedraw();
}
private renderModal(): ModalDefinition {
return {
title: 'Enter argument name',
content:
m(ArgumentPopup, {
knownArguments:
globals.state.nonSerializableState.pivotTable.argumentNames,
onArgumentChange: (arg) => {
this.typedArgument = arg;
},
}) as AnyAttrsVnode,
buttons: [
{
text: 'Add',
action: () => {
this.callback(this.typedArgument);
this.typedArgument = '';
},
},
],
onClose: () => {
this.showModal = false;
},
};
}
// A method that should be called in `view` method of whatever component is
// using the attribute modal.
update() {
if (this.showModal) {
fullscreenModalContainer.updateVdom(this.renderModal());
}
}
}