Задать значение раскрывающегося списка обратно для заполнителя или самого первого параметра после события onClick для кнопки? - PullRequest
0 голосов
/ 07 апреля 2020

В следующем коде у меня есть раскрывающийся список и кнопка. Как только вы выберете опцию в выпадающем меню и нажмете кнопку, это значение будет отправлено в Excel в активной ячейке. После отправки этих данных в Excel можно ли вернуть раскрывающийся список в качестве заполнителя? Или я могу установить в раскрывающемся списке первое значение (которое в данном случае пусто)? Как я могу установить значение Dropdown обратно в качестве заполнителя или пустым?

import * as React from "react";
import { Dropdown, DropdownMenuItemType, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';
import { PrimaryButton } from 'office-ui-fabric-react/lib/';
export interface ParentProps {
};
export interface ParentState  {
  selectedItem?: { key: string | number | undefined };
  operationType?;
};
export default class ParentComponent extends React.Component<ParentProps, ParentState> {
  constructor(props, context) {
    super(props, context);
    this.state = {
      operationType: '',
    };
  }
  addToExcel = async () => {
    try {
      await Excel.run(async context => {
        const range = context.workbook.getSelectedRange();
        range.load("address");
        await context.sync();
        range.values = (this.state.operationType);
      });
    } catch (error) {
      console.error(error);
    }
    this.setState({
    })
  };
  render() {
    const { selectedItem } = this.state;
    const options: IDropdownOption[] = [
      { key: 'blank', text: '' },
      { key: 'topLevelMake', text: 'Parents', itemType: DropdownMenuItemType.Header },
      { key: 'topLevel', text: 'TOP LEVEL' },
      { key: 'make', text: 'MAKE ITEM' },
    ];
    return (
      <div>
        <Dropdown
          label="Operation"
          selectedKey={selectedItem ? selectedItem.key : undefined}
          onChange={this._onChange}
          placeholder={"Select an option"}
          options={options}
          styles={{ dropdown: { width: 300 } }}
        />
        <p></p>
        <PrimaryButton
          text="Enter"
          onClick={this.addToExcel}
        />
      </div>
    );
  }
  private _onChange = (e, item: IDropdownOption): void => {
    this.setState({ selectedItem: item });
    this.setState({ operationType: item.text })
    console.log(e);
    }
  };

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Попробуйте что-то подобное на вашем addToExcel():

  addToExcel = async () => {
    try {
      await Excel.run(async context => {
        const range = context.workbook.getSelectedRange();
        range.load("address");
        await context.sync();
        range.values = (this.state.operationType);
      });
    } catch (error) {
      console.error(error);
    }
    this.setState({
      selectedItem: {key:'blank'},
    })
  };

0 голосов
/ 07 апреля 2020

Вы должны обновить свое состояние после операций Excel.

addToExcel = async () => {
    try {
      await Excel.run(async context => {
        const range = context.workbook.getSelectedRange();
        range.load("address");
        await context.sync();
        range.values = (this.state.operationType); 
      });
      // update state after asyn operations is done
        this.setState({
            selectedItem:undefined
        })
    } catch (error) {
      console.error(error);
    }

  };
...