Skip to content
This repository was archived by the owner on Aug 7, 2020. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/oui-angular/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import Field from "@ovh-ui/oui-field";
import FormActions from "@ovh-ui/oui-form-actions";
import GuideMenu from "@ovh-ui/oui-guide-menu";
import HeaderTabs from "@ovh-ui/oui-header-tabs";
import InlineAdder from "@ovh-ui/oui-inline-adder";
import Message from "@ovh-ui/oui-message";
import Modal from "@ovh-ui/oui-modal";
import Navbar from "@ovh-ui/oui-navbar";
Expand Down Expand Up @@ -53,6 +54,7 @@ export default angular
FormActions,
GuideMenu,
HeaderTabs,
InlineAdder,
Message,
Modal,
Navbar,
Expand Down
1 change: 1 addition & 0 deletions packages/oui-angular/src/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ loadTests(require.context("../../oui-field/src/", true, /.*((\.spec)|(index))$/)
loadTests(require.context("../../oui-form-actions/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-guide-menu/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-header-tabs/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-inline-adder/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-message/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-modal/src/", true, /.*((\.spec)|(index))$/));
loadTests(require.context("../../oui-navbar/src/", true, /.*((\.spec)|(index))$/));
Expand Down
168 changes: 168 additions & 0 deletions packages/oui-inline-adder/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# Inline adder

<component-status cx-design="complete" ux="rc"></component-status>

## Usage

### Basic

```html:preview
<oui-inline-adder>
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
<oui-inline-adder-field ng-hide="$ctrl.togglerLoading">
<oui-field label="Field 2">
<input type="text" class="oui-input" name="field2" ng-model="field2" required>
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
```

### Multiple rows

```html:preview
<oui-inline-adder>
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
<oui-inline-adder-field>
<oui-field label="Field 2">
<input type="text" class="oui-input" name="field2" ng-model="field2">
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 3">
<input type="text" class="oui-input" name="field3" ng-model="field3" required>
</oui-field>
</oui-inline-adder-field>
<oui-inline-adder-field>
<oui-field label="Field 4">
<input type="text" class="oui-input" name="field4" ng-model="field4">
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
```

### Adaptive fields

**Note**: Fields with `adaptive` attribute will adapt their size to their content.

```html:preview
<oui-inline-adder>
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
<oui-inline-adder-field adaptive>
<oui-field label="Field 2" size="m">
<label class="oui-select">
<select name="field2" ng-model="field2" class="oui-select__input" required>
<option value="" disabled selected>Select the OS</option>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<option value="" disabled selected>Select the OS</option>
<option value="" disabled selected>Select the Operating System</option>

<option value="freebsd">FreeBSD</option>
<option value="linux">Linux</option>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As you may know, Linux is not an operating system. You probably mean a GNU/Linux distributions right? :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll update the example. It comes from the past contribution.

<option value="osx">OSX</option>
<option value="windows">Windows</option>
</select>
<span class="oui-icon oui-icon-chevron-down" aria-hidden="true"></span>
</label>
</oui-field>
</oui-inline-adder-field>
<oui-inline-adder-field adaptive>
<oui-field label="Field 3">
<oui-numeric name="field3" model="field3"></oui-numeric>
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
```

### Events

#### `on-add`

**Note**: If you want to access the form inside `on-add` callback, you need to use the `form` variable as below.

```html:preview
<oui-inline-adder on-add="$ctrl.onAdd(form)">
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
<div class="oui-doc-preview-only">
<p>On Add</p>
<pre class="oui-doc-code oui-doc-code_json">{{$ctrl.addedForm | json}}</pre>
</div>
```

#### `on-remove`

**Note**: If you want to access the form inside `on-remove` callback, you need to use the `form` variable as below.

```html:preview
<oui-inline-adder on-remove="$ctrl.onRemove(form)">
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
<div class="oui-doc-preview-only">
<p>On Remove</p>
<pre class="oui-doc-code oui-doc-code_json">{{$ctrl.removedForm | json}}</pre>
</div>
```

#### `on-change`

**Note**: If you want to access the forms array inside `on-change` callback, you need to use the `forms` variable as below.

```html:preview
<oui-inline-adder on-change="$ctrl.onChange(forms)">
<oui-inline-adder-row>
<oui-inline-adder-field>
<oui-field label="Field 1">
<input type="text" class="oui-input" name="field1" ng-model="field1" required>
</oui-field>
</oui-inline-adder-field>
</oui-inline-adder-row>
</oui-inline-adder>
<div class="oui-doc-preview-only">
<p>On Change</p>
<pre class="oui-doc-code oui-doc-code_json">{{$ctrl.changedForms | json}}</pre>
</div>
```

## API

### oui-inline-adder

| Attribute | Type | Binding | One-time binding | Values | Default | Description
| ---- | ---- | ---- | ---- | ---- | ---- | ----
| `on-add` | function | & | no | n/a | n/a | handler triggered when a row is added
| `on-remove` | function | & | no | n/a | n/a | handler triggered when a row is removed
| `on-change` | function | & | no | n/a | n/a | handler triggered when rows have changed

### oui-inline-adder-field

| Attribute | Type | Binding | One-time binding | Values | Default | Description
| ---- | ---- | ---- | ---- | ---- | ---- | ----
| `adaptive` | boolean | <? | yes | `true`, `false` | `false` | adaptive field flag
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import controller from "./inline-adder-field.controller";

export default {
bindings: {
adaptive: "<?"
},
controller
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { addBooleanParameter } from "@ovh-ui/common/component-utils";

export default class {
constructor ($attrs, $element, $timeout) {
"ngInject";

this.$attrs = $attrs;
this.$element = $element;
this.$timeout = $timeout;
}

$onInit () {
addBooleanParameter(this, "adaptive");
}

$postLink () {
this.$timeout(() => {
this.$element.addClass("oui-inline-adder__field");

if (this.adaptive) {
this.$element.addClass("oui-inline-adder__field_adaptive");
}
});
}
}
12 changes: 12 additions & 0 deletions packages/oui-inline-adder/src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import InlineAdder from "./inline-adder.component";
import InlineAdderField from "./field/inline-adder-field.component";
import InlineAdderProvider from "./inline-adder.provider";
import InlineAdderRow from "./row/inline-adder-row.component";

export default angular
.module("oui.inline-adder", [])
.component("ouiInlineAdder", InlineAdder)
.component("ouiInlineAdderField", InlineAdderField)
.component("ouiInlineAdderRow", InlineAdderRow)
.provider("ouiInlineAdderConfiguration", InlineAdderProvider)
.name;
Loading