# folder（フォルダー）

```javascript
// Eagle アプリで現在選択されているフォルダを取得
let folder = (await eagle.folder.getSelected())[0];

// 属性を変更
folder.name = '新しいフォルダ名';
folder.description = '新しい説明...';

// 変更を保存
await folder.save();
```

{% hint style="success" %}
**🦄 ベストプラクティス：** データの安全性を確保するために、API が提供する `save()` メソッドを使用してデータの読み書きや変更を行い、Eagle リソースライブラリの下の `metadata.json` や任意のファイルを直接変更しないようにしてください。
{% endhint %}

## メソッド <a href="#z1a5y" id="z1a5y"></a>

## create(options) <a href="#xnzds" id="xnzds"></a>

フォルダを作成します。

* `options` Object
  * `name` string - フォルダ名
  * `description` string (任意) - フォルダの説明
  * `parent` string (任意) - 親フォルダの ID。このパラメーター付きだと `createSubfolder(parentId, options)` と同じです。
* 戻り値 `Promise<folder: Folder>` - 成功した `folder` を返します。

```javascript
let newFolder = await eagle.folder.create({
    name: '新しいフォルダ',
    description: 'フォルダの説明。',
});
```

***

## createSubfolder(parentId, options) <a href="#rys4i" id="rys4i"></a>

サブフォルダを作成します。

* `parentId` string - 親フォルダの ID
* `options` Object
  * `name` string - フォルダ名
  * `description` string (任意) - フォルダの説明
* 戻り値 `Promise<folder: Folder>` - 成功した `folder` を返します。

```javascript
let parentFolder = await eagle.folder.getById('folder_id');
let subFolder = await eagle.folder.createSubfolder(parentFolder.id, {
    name: 'サブフォルダ',
    description: 'サブフォルダの説明。',
});
```

***

## get(options) <a href="#x9nu2" id="x9nu2"></a>

指定条件のフォルダを取得。

* `options` Object - 検索条件
  * `id` string (任意) - フォルダの id
  * `ids` string\[] (任意) - フォルダ id の配列
  * `isSelected` boolean (任意) - 現在選択されているフォルダ
  * `isRecent` boolean (任意) - 最近利用したフォルダ
* 戻り値 `Promise<folders: Folder[]>` - 検索結果の `folders`

```javascript
// 指定された id のフォルダを取得
let folders = await eagle.folder.get({
    ids: ['folder_id1', 'folder_id2']
});

// 現在のアプリで選択されているフォルダを取得
let folders = await eagle.folder.get({
    isSelected: true
});
```

***

## getAll() <a href="#fbdzh" id="fbdzh"></a>

すべてのフォルダを取得します。

* 戻り値 `Promise<folders: Folder[]>` - `folders` を返します。

```javascript
let folders = await eagle.folder.getAll();
```

***

## getById(folderId) <a href="#sy5fz" id="sy5fz"></a>

対応する `folderId` のフォルダーを取得します。

* `folderId` string - フォルダの id
* 返り値 `Promise<folder: Folder>` - `folder` の検索結果

```javascript
let folder = await eagle.folder.getById('folder_id');
```

***

## getByIds(folderIds) <a href="#n0gjq" id="n0gjq"></a>

対応する `folderIds` のフォルダーアレイを取得します。

* `folderIds` string\[] - フォルダー id のアレイ
* 返り値 `Promise<folders: Folder[]>` - `folders` の検索結果

```javascript
let folders = await eagle.folder.getByIds(['folder_id1', 'folder_id2']);
```

***

## getSelected() <a href="#dsbgj" id="dsbgj"></a>

現在のアプリケーションで選択されているフォルダーを取得します。

* 返り値 `Promise<folders: Folder[]>` - `folders`

```javascript
let folders = await eagle.folder.getSelected();
```

***

## getRecents() <a href="#dwsxw" id="dwsxw"></a>

最近使用されたフォルダーを取得します。

* 返り値 `Promise<folders: Folder[]>` - `folders`

```javascript
let folders = await eagle.folder.getRecents();
```

***

## open(folderId) <a href="#gjdst" id="gjdst"></a>

Eagle は対応する `folderId` のフォルダーを開きます。

* 返り値 `Promise<void>`

```javascript
await eagle.folder.open('folder_id');

// 以下と同等
let folder = await eagle.folder.getById('folder_id');
await folder.open();
```

{% hint style="info" %}
ヒント：フォルダーを開くために、フォルダーのインスタンスの `open()` メソッドを直接呼び出すこともできます。
{% endhint %}

***

## クラス：Folder <a href="#uezi0" id="uezi0"></a>

Folder API `get` から返される Object タイプで、変更および保存機能を提供します。

```javascript
let folder = await eagle.folder.getById('folder_id');

console.log(folder.id);
console.log(folder.name);

folder.name = 'new name';
console.log(folder.name);

await folder.save();
```

{% hint style="success" %}
**🦄 ベストプラクティス：** データの安全性を確保するために、Folder インスタンスが提供する `save()` メソッドを使用してデータの取得および変更を行い、Eagle のリソースリポジトリの下の `metadata.json` または任意のファイルを直接変更しないでください。
{% endhint %}

***

#### インスタンスメソッド <a href="#sihmc" id="sihmc"></a>

### **save()**

すべての変更を保存します。

* 返り値 `Promise<void>`

```javascript
let folder = await eagle.folder.getById('folder_id');
folder.name = 'New Fodler Name';

// 変更を保存
await folder.save();
```

***

### **open()**

Eagle はこのフォルダーを開きます。

* 返り値 `Promise<void>`

```javascript
let folder = await eagle.folder.getById('folder_id');
await folder.open();

// これと等価
await eagle.folder.open('folder_id');
```

{% hint style="info" %}
ヒント：フォルダを開くために、`eagle.folder.open(folderId)` メソッドを直接呼び出すこともできます。
{% endhint %}

***

#### インスタンス属性 <a href="#woenk" id="woenk"></a>

`Folder` インスタンスには以下の属性が含まれます：

### **`id` string**

読み取り専用、フォルダー id。

### **`name` string**

フォルダー名。

### **`description` string**

フォルダーの説明、紹介。

### **`icon` string**

読み取り専用、フォルダーのアイコン。

### **`iconColor` string**

フォルダーのアイコンの色。

```javascript
let folder = await eagle.folder.getById('folder_id');

// フォルダーの色を赤に設定
folder.iconColor = eagle.folder.IconColor.Red;

// または文字列値を直接使用
folder.iconColor = 'red';

// 変更を保存
await folder.save();
```

{% hint style="info" %}
注意：このプロパティは Eagle 4.0 build12 より前は読み取り専用で、変更をサポートしていませんでした。Eagle 4.0 build12 以降、このプロパティを変更できるようになりました。
{% endhint %}

### **`createdAt` Integer**

読み取り専用、フォルダーの作成時間（タイムスタンプ）。

```javascript
let date = new Date(folder.createdAt);
```

### **`parent` string**

親フォルダー ID。

```javascript
let folder = await eagle.folder.getById('folder_id');

// 親フォルダー ID を取得
console.log(folder.parent);

// 親フォルダーを変更（フォルダーを別の親フォルダーに移動）
folder.parent = 'parent_folder_id';
await folder.save();

// ルートディレクトリに移動（null または undefined に設定）
folder.parent = null;
await folder.save();
```

{% hint style="info" %}
注意：このプロパティは Eagle 4.0 build12 より前は読み取り専用で、変更をサポートしていませんでした。Eagle 4.0 build12 以降、このプロパティを変更できるようになり、このプロパティを変更することでフォルダーを異なる親フォルダーに移動できるようになりました。
{% endhint %}

### **`children` Folder\[]**

読み取り専用、子フォルダーの配列。

```javascript
let children = folder.children;

console.log(children[0]);
await children[0].open();
```

***

## 静的プロパティ <a href="#static-properties" id="static-properties"></a>

### **`IconColor` Object**

フォルダーの `iconColor` プロパティを設定するための事前定義されたフォルダーアイコンの色定数を提供します。

```javascript
// 利用可能な色定数
eagle.folder.IconColor.Red      // 'red'
eagle.folder.IconColor.Orange   // 'orange' 
eagle.folder.IconColor.Yellow   // 'yellow'
eagle.folder.IconColor.Green    // 'green'
eagle.folder.IconColor.Aqua     // 'aqua'
eagle.folder.IconColor.Blue     // 'blue'
eagle.folder.IconColor.Purple   // 'purple'
eagle.folder.IconColor.Pink     // 'pink'
```

**使用例：**

```javascript
let folder = await eagle.folder.getById('folder_id');

// 色定数を使用してフォルダーの色を設定
folder.iconColor = eagle.folder.IconColor.Blue;
await folder.save();

// 複数のフォルダーの色を一括設定
let folders = await eagle.folder.getAll();
for (let i = 0; i < folders.length; i++) {
    if (i % 2 === 0) {
        folders[i].iconColor = eagle.folder.IconColor.Green;
    } else {
        folders[i].iconColor = eagle.folder.IconColor.Purple;
    }
    await folders[i].save();
}
```

{% hint style="success" %}
**🦄 ベストプラクティス：** より良いコードヒントと型安全性のために、文字列値を直接使用するのではなく、`eagle.folder.IconColor` 定数を使用することをお勧めします。
{% endhint %}

### &#x20;<a href="#nptwx" id="nptwx"></a>
