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

Add chart options #75

Merged
merged 3 commits into from
Mar 12, 2025
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
feat: add chart data label
kyoncy committed Mar 12, 2025
commit 30d4ed0ab06b766fb4a8d4d458e7355ac3577e2e
150 changes: 150 additions & 0 deletions rust/src/wrapper/chart/chart_data_label.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
use rust_xlsxwriter::{self as xlsx};
use wasm_bindgen::prelude::*;

use crate::wrapper::chart::chart_data_label_position::ChartDataLabelPosition;
use crate::wrapper::chart::chart_font::ChartFont;
use crate::wrapper::chart::chart_format::ChartFormat;

#[wasm_bindgen]
pub struct ChartDataLabel {
pub(crate) inner: xlsx::ChartDataLabel,
}

#[wasm_bindgen]
impl ChartDataLabel {
#[wasm_bindgen(constructor)]
pub fn new() -> ChartDataLabel {
ChartDataLabel {
inner: xlsx::ChartDataLabel::new(),
}
}

#[wasm_bindgen(js_name = "showValue")]
pub fn show_value(&mut self) -> ChartDataLabel {
self.inner.show_value();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showCategoryName")]
pub fn show_category_name(&mut self) -> ChartDataLabel {
self.inner.show_category_name();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showSeriesName")]
pub fn show_series_name(&mut self) -> ChartDataLabel {
self.inner.show_series_name();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showLeaderLines")]
pub fn show_leader_lines(&mut self) -> ChartDataLabel {
self.inner.show_leader_lines();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showLegendKey")]
pub fn show_legend_key(&mut self) -> ChartDataLabel {
self.inner.show_legend_key();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showPercentage")]
pub fn show_percentage(&mut self) -> ChartDataLabel {
self.inner.show_percentage();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setPosition")]
pub fn set_position(&mut self, position: ChartDataLabelPosition) -> ChartDataLabel {
self.inner.set_position(position.into());
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setFont")]
pub fn set_font(&mut self, font: &ChartFont) -> ChartDataLabel {
self.inner.set_font(&font.inner);
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setFormat")]
pub fn set_format(&mut self, format: &mut ChartFormat) -> ChartDataLabel {
self.inner.set_format(&mut format.inner);
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setNumFormat")]
pub fn set_num_format(&mut self, num_format: &str) -> ChartDataLabel {
self.inner.set_num_format(num_format);
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setSeparator")]
pub fn set_separator(&mut self, separator: char) -> ChartDataLabel {
self.inner.set_separator(separator);
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showYValue")]
pub fn show_y_value(&mut self) -> ChartDataLabel {
self.inner.show_y_value();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "showXValue")]
pub fn show_x_value(&mut self) -> ChartDataLabel {
self.inner.show_x_value();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setHidden")]
pub fn set_hidden(&mut self) -> ChartDataLabel {
self.inner.set_hidden();
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "setValue")]
pub fn set_value(&mut self, value: &str) -> ChartDataLabel {
self.inner.set_value(value);
ChartDataLabel {
inner: self.inner.clone(),
}
}

#[wasm_bindgen(js_name = "toCustom")]
pub fn to_custom(&mut self) -> ChartDataLabel {
self.inner.to_custom();
ChartDataLabel {
inner: self.inner.clone(),
}
}
}

34 changes: 34 additions & 0 deletions rust/src/wrapper/chart/chart_data_label_position.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
use rust_xlsxwriter as xlsx;
use wasm_bindgen::prelude::*;

#[derive(Debug, Clone, Copy)]
#[wasm_bindgen]
pub enum ChartDataLabelPosition {
Default,
Center,
Right,
Left,
Above,
Below,
InsideBase,
InsideEnd,
OutsideEnd,
BestFit,
}

impl From<ChartDataLabelPosition> for xlsx::ChartDataLabelPosition {
fn from(position: ChartDataLabelPosition) -> Self {
match position {
ChartDataLabelPosition::Default => xlsx::ChartDataLabelPosition::Default,
ChartDataLabelPosition::Center => xlsx::ChartDataLabelPosition::Center,
ChartDataLabelPosition::Right => xlsx::ChartDataLabelPosition::Right,
ChartDataLabelPosition::Left => xlsx::ChartDataLabelPosition::Left,
ChartDataLabelPosition::Above => xlsx::ChartDataLabelPosition::Above,
ChartDataLabelPosition::Below => xlsx::ChartDataLabelPosition::Below,
ChartDataLabelPosition::InsideBase => xlsx::ChartDataLabelPosition::InsideBase,
ChartDataLabelPosition::InsideEnd => xlsx::ChartDataLabelPosition::InsideEnd,
ChartDataLabelPosition::OutsideEnd => xlsx::ChartDataLabelPosition::OutsideEnd,
ChartDataLabelPosition::BestFit => xlsx::ChartDataLabelPosition::BestFit,
}
}
}
11 changes: 10 additions & 1 deletion rust/src/wrapper/chart/chart_series.rs
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ use std::sync::{Arc, Mutex};
use rust_xlsxwriter as xlsx;
use wasm_bindgen::prelude::*;

use super::{chart_point::ChartPoint, chart_range::ChartRange};
use super::{chart_data_label::ChartDataLabel, chart_point::ChartPoint, chart_range::ChartRange};

#[wasm_bindgen]
pub struct ChartSeries {
@@ -133,4 +133,13 @@ impl ChartSeries {
inner: Arc::clone(&self.inner),
}
}

#[wasm_bindgen(js_name = "setDataLabel", skip_jsdoc)]
pub fn set_data_label(&self, data_label: &ChartDataLabel) -> ChartSeries {
let mut series = self.inner.lock().unwrap();
series.set_data_label(&data_label.inner);
ChartSeries {
inner: Arc::clone(&self.inner),
}
}
}
2 changes: 2 additions & 0 deletions rust/src/wrapper/chart/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
mod chart_axis;
mod chart_data_label;
mod chart_data_label_position;
mod chart_font;
mod chart_format;
mod chart_legend;