// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library action_link_element;

import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';

@CustomTag('action-link')
class ActionLinkElement extends PolymerElement {
  ActionLinkElement.created() : super.created();

  @observable bool busy = false;
  @published var callback = null;
  @published String label = 'action';

  void doAction(var a, var b, var c) {
    if (busy) {
      return;
    }
    if (callback != null) {
      busy = true;
      // TODO(turnidge): Track down why adding a dummy argument makes
      // this work but having a no-argument callback doesn't.
      callback(null).whenComplete(() {
          busy = false;
        });
    }
  }
}
