Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support DateTimeRenderOption. #89

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
42 changes: 40 additions & 2 deletions lib/src/gsheets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ class GSheets {
/// [render] - determines how values should be rendered in the output.
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption
///
/// [dateTimeRender] - determines how datetime values should be rendered in the output.
/// https://developers.google.com/sheets/api/reference/rest/v4/DateTimeRenderOption
///
/// [input] - determines how input data should be interpreted.
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueInputOption
///
Expand All @@ -141,6 +144,7 @@ class GSheets {
String title, {
List<String> worksheetTitles = const <String>['Sheet1'],
ValueRenderOption render = ValueRenderOption.unformattedValue,
DateTimeRenderOption dateTimeRender = DateTimeRenderOption.serialNumber,
ValueInputOption input = ValueInputOption.userEntered,
}) async {
final client = await this.client.catchError((_) {
Expand Down Expand Up @@ -176,6 +180,7 @@ class GSheets {
json: jsonDecode(response.body),
client: client,
renderOption: _parseRenderOption(render),
dateTimeRenderOption: _parseDateTimeRenderOption(dateTimeRender),
inputOption: _parseInputOption(input),
);
}
Expand All @@ -187,6 +192,9 @@ class GSheets {
/// [render] - determines how values should be rendered in the output.
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption
///
/// [dateTimeRender] - determines how datetime values should be rendered in the output.
/// https://developers.google.com/sheets/api/reference/rest/v4/DateTimeRenderOption
///
/// [input] - determines how input data should be interpreted.
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueInputOption
///
Expand All @@ -195,6 +203,7 @@ class GSheets {
Future<Spreadsheet> spreadsheet(
String spreadsheetId, {
ValueRenderOption render = ValueRenderOption.unformattedValue,
DateTimeRenderOption dateTimeRender = DateTimeRenderOption.serialNumber,
ValueInputOption input = ValueInputOption.userEntered,
}) async {
final client = await this.client.catchError((_) {
Expand All @@ -208,6 +217,7 @@ class GSheets {
json: jsonDecode(response.body),
client: client,
renderOption: _parseRenderOption(render),
dateTimeRenderOption: _parseDateTimeRenderOption(dateTimeRender),
inputOption: _parseInputOption(input),
);
}
Expand All @@ -223,6 +233,17 @@ class GSheets {
}
}

static String _parseDateTimeRenderOption(DateTimeRenderOption option) {
switch (option) {
case DateTimeRenderOption.serialNumber:
return 'SERIAL_NUMBER';
case DateTimeRenderOption.formattedString:
return 'FORMATTED_STRING';
default:
return 'SERIAL_NUMBER';
}
}

static String _parseInputOption(ValueInputOption option) {
switch (option) {
case ValueInputOption.userEntered:
Expand Down Expand Up @@ -301,6 +322,7 @@ class GSheets {
}

enum ValueRenderOption { formattedValue, unformattedValue, formula }
enum DateTimeRenderOption { serialNumber, formattedString }
enum ValueInputOption { userEntered, raw }
enum ExportFormat { xlsx, csv, pdf }

Expand Down Expand Up @@ -415,6 +437,10 @@ class Spreadsheet {
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueRenderOption
final String renderOption;

/// Determines how values should be rendered in the output.
/// https://developers.google.com/sheets/api/reference/rest/v4/DateTimeRenderOption
final String dateTimeRenderOption;

/// Determines how input data should be interpreted.
/// https://developers.google.com/sheets/api/reference/rest/v4/ValueInputOption
final String inputOption;
Expand All @@ -426,13 +452,15 @@ class Spreadsheet {
this._data,
this.sheets,
this.renderOption,
this.dateTimeRenderOption,
this.inputOption,
);

factory Spreadsheet._fromJson({
required Map<String, dynamic> json,
required AutoRefreshingAuthClient client,
required String renderOption,
required String dateTimeRenderOption,
required String inputOption,
}) {
final spreadsheetId = json['spreadsheetId'];
Expand All @@ -444,6 +472,7 @@ class Spreadsheet {
client,
spreadsheetId,
renderOption,
dateTimeRenderOption,
inputOption,
))
.toList();
Expand All @@ -454,6 +483,7 @@ class Spreadsheet {
data,
sheets,
renderOption,
dateTimeRenderOption,
inputOption,
);
}
Expand Down Expand Up @@ -495,6 +525,7 @@ class Spreadsheet {
_client,
id,
renderOption,
dateTimeRenderOption,
inputOption,
))
.toList();
Expand Down Expand Up @@ -611,6 +642,7 @@ class Spreadsheet {
_client,
id,
renderOption,
dateTimeRenderOption,
inputOption,
);
sheets.forEach((sheet) => sheet._incrementIndex(ws.index - 1));
Expand Down Expand Up @@ -647,6 +679,7 @@ class Spreadsheet {
_client,
id,
renderOption,
dateTimeRenderOption,
inputOption,
);
sheets.forEach((sheet) => sheet._incrementIndex(ws.index - 1));
Expand Down Expand Up @@ -684,6 +717,7 @@ class Spreadsheet {
_client,
id,
renderOption,
dateTimeRenderOption,
inputOption,
);
sheets.forEach((sheet) => sheet._incrementIndex(duplicate.index - 1));
Expand Down Expand Up @@ -907,6 +941,7 @@ class Worksheet {
final String spreadsheetId;
final int id;
final String renderOption;
final String dateTimeRenderOption;
final String inputOption;
String _title;
int _index;
Expand Down Expand Up @@ -940,6 +975,7 @@ class Worksheet {
this._rowCount,
this._columnCount,
this.renderOption,
this.dateTimeRenderOption,
this.inputOption,
);

Expand All @@ -948,6 +984,7 @@ class Worksheet {
AutoRefreshingAuthClient client,
String sheetsId,
String renderOption,
String dateTimeRenderOption,
String inputOption,
) {
return Worksheet._(
Expand All @@ -959,6 +996,7 @@ class Worksheet {
sheetJson['properties']['gridProperties']['rowCount'],
sheetJson['properties']['gridProperties']['columnCount'],
renderOption,
dateTimeRenderOption,
inputOption,
);
}
Expand Down Expand Up @@ -1334,7 +1372,7 @@ class Worksheet {
Future<List<String>> _get(String range, String dimension) async {
final encodedRange = Uri.encodeComponent(range);
final response = await _client.get(
'$_sheetsEndpoint$spreadsheetId/values/$encodedRange?majorDimension=$dimension&valueRenderOption=$renderOption'
'$_sheetsEndpoint$spreadsheetId/values/$encodedRange?majorDimension=$dimension&valueRenderOption=$renderOption&dateTimeRenderOption=$dateTimeRenderOption'
.toUri(),
);
checkResponse(response);
Expand All @@ -1350,7 +1388,7 @@ class Worksheet {
final encodedRange = Uri.encodeComponent(range);

final response = await _client.get(
'$_sheetsEndpoint$spreadsheetId/values/$encodedRange?majorDimension=$dimension&valueRenderOption=$renderOption'
'$_sheetsEndpoint$spreadsheetId/values/$encodedRange?majorDimension=$dimension&valueRenderOption=$renderOption&dateTimeRenderOption=$dateTimeRenderOption'
.toUri(),
);
checkResponse(response);
Expand Down